2014-01-25 125 views
0

我想在我的情況下初始化一個方法。我有一些像JavaScript對象初始化問題

var test = new testObj() 

function testObj(){ 
     this.init(); 
    } 

testObj.prototype.init = function(){   
    //do something 
} 

不過,我從控制檯得到testObj has no method of init錯誤。

我不確定會發生什麼。有人可以幫我解決這個問題嗎?非常感謝!

+0

老百姓爲什麼downvote搶原型.. ..這是一個真正的問題完全有效的問題 –

回答

3

那是因爲你的腳本的順序

function testObj() { 
    console.log(this) 
    this.init(); 
} 

testObj.prototype.init = function() { 
    //do something 
} 

var test = new testObj(); 

函數聲明會得到hoisted到申報範圍的頂端,所以你可以創建一個新的testObj實例,但原型的增強有當構造函數被調用時不會發生,所以你不會得到init方法。

吊裝代碼可能看起來像下面後,在執行new testObj(),它調用構造函數,但init方法沒有被添加到testObj

function testObj() { 
    console.log(this) 
    this.init(); 
} 

var test = new testObj(); 

testObj.prototype.init = function() { 
    //do something 
} 
+1

哦,男孩..我的大腦已經死了。我什至不知道這一點。謝謝您的幫助 – FlyingCat