我是JavaScript的面向對象編程(來自C++領域)的新手。調用構造函數的成員函數
我想知道從構造函數調用成員函數的最佳做法。
以下是一段代碼: 很明顯,「initialize」是在調用「this.initialize();」之前聲明的。
function Foo() {
this.initialize = function() {
alert("initialize");
};
this.hello = function() {
alert("helloWorld");
this.initialize();
};
this.initialize();
};
var f = new Foo();
f.hello();
如果我更改了以下代碼,它將在「this.initialize();」時失敗。
問題1這是爲什麼? JavaScript引擎不會首先讀取對象的所有成員函數聲明嗎?
function Foo() {
this.initialize(); //failed here
this.initialize = function() {
alert("initialize");
};
this.hello = function() {
alert("helloWorld");
this.initialize();
};
};
var f = new Foo();
f.hello();
然後我做了這樣的改變。
函數「初始化」在構造上執行,但函數「hello」中調用「this.initialize()」失敗。
function Foo() {
this.initialize = function() {
alert("initialize");
}();
this.hello = function() {
alert("helloWorld");
this.initialize(); //failed here
};
};
var f = new Foo();
f.hello();
問題2:是的代碼的第一塊從構造主叫成員函數的必由之路?
更新:
,如果我必須在使用之前定義的函數,問題3:爲什麼下面的代碼工作?
function Foo() {
this.hello = function() {
alert("helloWorld");
this.initialize();
};
this.initialize();
};
Foo.prototype.initialize = function() {
alert("initialize");
};
var f = new Foo();
f.hello();
問題4: 爲什麼下面的代碼成功了嗎? (考慮 「未來」 函數被調用後所定義)
alert("The future says: " + future());
function future() {
return "We STILL have no flying cars.";
}
您必須在調用它之前定義函數,因此您的第二個代碼將不起作用。此外,第三個(最後一個)將不起作用,因爲**初始化**不是函數,因爲你在末尾有'()',這是一個返回值 – Cilan