所以我制作了一个关于监狱和囚犯的应用程序,我使用的是Observer Pattern。理想情况下,我希望只有一个全局变量命名为App,我希望使用提供的观察者模式代码(在上面的链接)作为我的应用程序中的助手。
例如
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允许的自由)。
如果我的问题听起来“太笼统”或“缺乏建设性”,我提前道歉,但我希望得到一些建议。
发布于 2013-12-18 19:42:57
我没有使用观察者模式,但我的想法是:
new操作符有效地创建一个空白对象并将其分配给this。我想说,它等同于ctor.apply({}),除了它不会返回新构造的对象(你必须事先保存对象)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();}
但就个人而言,如果您只是想创建类型,我只需要在适当的作用域中将它们声明为函数即可。类似于:
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();
}https://stackoverflow.com/questions/20656149
复制相似问题