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 

人們會認爲綁定使用較少的內存,速度更快,但是我最近的地方讀了綁定實際上比傳遞閉包慢,所以我不確定內存消耗。