2015-11-07 48 views
2

我有JavaScript函數作爲對象:爲什麼一個功能包unside一個函數對象不叫在JavaScript

function hexMesh(){ 
    var side=25; 
    console.log('hexMesh'); 

    function drawOver(){ 
    } 
} 

正如你可以看到它有一個函數調用drawOver

我嘗試通過構造函數來調用它,如下所示:

window.onload = function() { 
    hexMeshObj=new hexMesh(); 
    hexMeshObj.drawOver(); 
} 

但它給了我錯誤說undefined is not a function

現在我知道我可以在對象,但我的原型聲明函數不想這樣做。

這是JSFiddle

回答

1

不能使用JavaScript這樣的!

解決方法:使用類類原型(請不要把他們當作階級,雖然他們提供繼承)

var x = function(v){ this.test = v; } // This is your constructor 
x.prototype.show = function(){ console.log("TEST", this.test); } // This is a prototype with this as a context 

var y = new x(true); 
y.show(); // Logs TEST true 

編輯: 或者(雖然原型的方式是更好,因爲它提供了真正的inheritance the oop way

var x = function(v){ 
var context = this; 
this.test = v; 
this.show = function(){ 
    console.log('test', context.test) 
}); 

另一種替代方法是使用bind綁定上下文,如果你需要的話。

+0

這可能是有益的,包括一些信息,爲什麼使用原型比第二種方法比較好。 – forgivenson

+0

增加了參考。感謝您的建議。 –

+0

我一直在尋找另一種方法,我知道我可以使用原型做,但我不想功能是在對象的原型,因爲它並不在我的情況是有意義的, 感謝 – Snedden27

相關問題