首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript代码结构

Javascript代码结构
EN

Stack Overflow用户
提问于 2013-12-18 18:53:00
回答 1查看 153关注 0票数 0

所以我制作了一个关于监狱和囚犯的应用程序,我使用的是Observer Pattern。理想情况下,我希望只有一个全局变量命名为App,我希望使用提供的观察者模式代码(在上面的链接)作为我的应用程序中的助手。

例如

代码语言:javascript
复制
function App() {
    this.helpers = {
        prisoners: function ObserverList() {
            this.observerList = [];

            ObserverList.prototype.Add = function( obj ){
                return this.observerList.push( obj );
            };
           //more stuff
        },

        prison: function Subject() {
            this.observers = new ObserverList();

            Subject.prototype.AddObserver = function(observer){
                this.observers.Add(observer);
            }; 
            //more stuff
       },
    ...
   };
   this.alcatraz = new this.helpers.prison();

我的问题是,这在可维护性、最佳实践等方面有意义吗?它看起来当然比仅仅将观察者代码转储为App内部的一堆内部函数要好得多。

随着这种重构,prison中出现了一个问题。由于所有观察者模式函数现在都是this.helpers中的键/值对,我应该将this.observers = new ObserverList();更改为类似于new this.helpers.prisoners();的值,但是this的值已经更改,并且我不知道如何使用new操作符执行call/apply。(如果这有任何意义的话)。

此外,我将感谢任何有真实世界友好示例的来源(书籍/博客/视频),而不是代码片段。不是针对Addy Osmani和他的工作,他是所有这些免费资源的一个令人惊叹的家伙,但对于一个新手来说,有时让所有东西都点击在一起比支持Javascript的人想象的要难(特别是考虑到Javascript允许的自由)。

如果我的问题听起来“太笼统”或“缺乏建设性”,我提前道歉,但我希望得到一些建议。

EN

回答 1

Stack Overflow用户

发布于 2013-12-18 19:42:57

我没有使用观察者模式,但我的想法是:

  1. 调用apply on new只是有意义的。在JS中,new操作符有效地创建一个空白对象并将其分配给this。我想说,它等同于ctor.apply({}),除了它不会返回新构造的对象(你必须事先保存对象)
  2. ,你可以提前定义ctor,只实例化helper:

function App() { function helpers() { var self = this;this.prisoners = function ObserverList() { this.observerList = [];ObserverList.prototype.Add = function (obj) { this.observerList.push(obj);};//更多东西};this.prison = function Subject() { this.observers = self.prisoners();Subject.prototype.AddObserver =函数(观察者){this.observers.Add(观察者);};//更多内容};};this.helpers =新帮助器();this.alcatraz =新this.helpers.prison();}

但就个人而言,如果您只是想创建类型,我只需要在适当的作用域中将它们声明为函数即可。类似于:

代码语言:javascript
复制
function App() {
    function prisoners() {
        this.observerList = [];
        ObserverList.prototype.Add = function (obj) {
            return this.observerList.push(obj);
        };
        //more stuff
    };
    function prison() {
        this.observers = new prisoners();
        Subject.prototype.AddObserver = function (observer) {
            this.observers.Add(observer);
        };
        //more stuff
    };
    this.alcatraz = new this.prison();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20656149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档