0

我正在开发一个“框架”并发现自己编写模块。Javascript构造函数,原型和实例化。体系结构和框架

为每个模块存在一组常用的初始化规则和常用的一组函数。

STEP 1.构造函数:

var ns = "namespace1"; 
t.scenarios[ns] = function (container, instanceName, options) { 
    // common for all scenarios, e.g. options initialization 
    t.core.defaultScenarioConstructor(this, ns, container, instanceName, options) 

    // things only for NAMESPACE1 
    this.PROPERTY1 = 1; 
} 

STEP 2.(相关问题) 后来我有一个原型

var p = t.scenarios[ns].prototype; 

p.newfunction = function(){ 
    this.PROPERTY1; // accessible 
} 

其被充满THINGS_ONLY_FOR_NAMESPACE1

t.core.defaultScenarioPrototype(p); 

步骤3/4。 实例化类(新的关键字)&调用DOM建设者

p.initNewView = function(container) {/* build dom and assign handlers*/} 


现在的问题......我想其他的“核心”模块中执行常见的构造函数/原型初始化。如果在STEP 2上我们添加函数到原型,那么它们有“this”关键字并且可以访问CURRENT_INTANCE字段,例如PROPERTY1。

但是,如果原型作为变量传递给“defaultScenarioPrototype”构建器,则所有函数都具有其他的“this”CORE类,它将生成构建器。
我们应该如何将“通用”功能添加到另一个模块的原型中?

+0

是't.core.defaultScenarioPrototype.call(this,p);'不工作?你可以使用调用或申请继承:http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR

+0

@HMR,非常感谢,我会检查它。还没有那个通话和申请肯。 –

+0

@HMR发布它作为答案,这是非常有帮助的。 –

回答

1

按照要求,我会添加我的评论作为答案。要调用某个this上下文中的功能,您可以使用Function.prototype.call,Function.prototype.applyFunction.prototype.bind

绑定使用了很多在你传递一个回调,并且不希望使用倒闭情况:

setTimeout(myOjbect.somefunction,100);//this in somefunction is window 

setTimeout(function(){ 
    myObject.somefunction(); 
},100);//this in somefunction is myObject but a closure is created 

setTimeout(myObject.somefunction.bind(myObject),100);//this is myObject 
            //and no closure is created 

人们会认为绑定使用较少的内存,速度更快,但是我最近的地方读了绑定实际上比传递闭包慢,所以我不确定内存消耗。