【发布时间】:2014-07-27 13:17:23
【问题描述】:
我该怎么做:
var abc = (function(){
..
})();
register(abc); // outside the protected class
对此:(没有在类外调用注册):
function register(object){ stores the object }
var abc = (function(){
..
register(this); // inside the protected class
})();
一些背景。
主类有一个插件对象数组,“注册”函数放置插件。 abc 就是这样一个插件。模块模式闭包之后的插件。我想将插件实例放入列表中,并且插件尽可能自包含。我想删除插件之外的其他功能。
我考虑过: MasterClass.plugins.abc = (函数..) 但我认为这会在加载任何插件之前创建对要实例化的 MasterClass.plugins 的依赖。
【问题讨论】:
-
这看起来很尴尬。为了减少 abc 和 register 之间的耦合,您至少应该将 register 函数传递给构造函数(想想“注入”)。
-
直到右侧表达式的评估完成后才会发生赋值,因此 IIFE abc 内的任何位置都将是未定义的。
-
也许你可以解释一下你想要什么?
-
我看不出第二种方法有什么问题,只要您不在第二个函数中重新定义 register ,由于关闭,您可以使用 register 函数,主要的退步是你会将你的类耦合到 register 函数,这是一个坏主意,所以就像@Makkes 所说你应该将你的 register 函数作为构造函数参数传递,所以如果在某个时候你决定提供其他注册方法,你只需要更改构造函数被调用的函数,它也有助于测试是什么使它成为一个好的实践。
标签: javascript class object