2011-11-14 65 views
0
var foo = function(){}; 
foo.prototype.value = 5; 
foo.prototype.addValue = function(){ foo.value = 6; } 
function bar(func) 
{ 
func(); // I'm running the function! 
} 
bar(foo.addValue); // pass in the function 
alert(foo.value); // it's now 6! 

爲什麼運行此JavaScript代碼時沒有提示提示?運行這個簡單的JavaScript代碼時沒有提示提示?

+1

該代碼錯誤;要麼是打錯輸入,要麼該書非常糟糕。 'addValue'應該使用'this'。 – SLaks

+0

在'bar(func)'函數中,您試圖調用未定義的'func()'。 – Unknown

回答

0

時調用正確的代碼應該是

var foo = function(){}; 
foo.prototype.value = 5; 
foo.prototype.addValue = function(){ foo.value = 6; } 
function bar(func) 
{ 
    func(); // I'm running the function! 
} 
bar(foo.prototype.addValue); // pass in the function 
alert(foo.value); 

var foo = function(){}; 
foo.prototype.value = 5; 
foo.prototype.addValue = function(){ foo.value = 6; } 
function bar(func) 
{ 
    func(); // I'm running the function! 
} 
bar(new foo().addValue); // pass in the function 
alert(foo.value); 

既然你聲明一個名爲addValue的原型,foo本身不包含addValue。要引用該函數,您必須使用foo.prototype.addValue。請注意,在這種情況下,foo包含foo.prototype.value值爲5,foo.value值爲6.

或者,如果意圖是創建新對象,則該對象將繼承addValue函數,因此調用新的foo()。addValue起作用。

+0

謝謝,夥計!這是一個錯誤,我將把它提交給勘誤頁面。 – user1007041

0

好,重構你的代碼將使:

var foo = { 
    value: 5, 
    addValue: function(){ 
     foo.value = 6; 
    } 
}; 

function bar(func){ 
    func(); // I'm running the function! 
} 

bar(foo.addValue); // pass in the function 
alert(foo.value); // it's now 6! 

設置foo.prototype.addValue不會幫助你定義foo.addValue

而且使用foo.value代替this.value的原因是爲了解決範圍的問題通過bar()