我正在下面的代碼嘗試。prototype javascript confusion
function Foo(who){
this.me = who;
}
Foo.prototype.identify = function(){
return "I am " + this.me;
};
var a1 = new Foo("a1");
a1.identify();
a1.identify = function(){
alert("Hello, " + Foo.prototype.identify.call(this));
};
a1.identify();
上面的代碼運行良好,我明白爲什麼使用Foo.prototype.identify.call。我想測試我的這種認識,所以我改變a1.identify下面
a1.identify2 = function(){
alert("Hello, " + a1.identify());
};
a1.identify2();
我上述預期的工作方式相同。我現在只是指通過直接協議鏈來識別。但是,當我在上面跑步時,我會變得不確定。我錯過了什麼(或誤解?)。
我認爲你不打電話功能只是打印功能。它應該是這個alert(「你好,」+ a1.identify());'而不是'alert(「Hello,」+ a1.identify);' –
現在還不清楚你的問題實際上是什麼。在上面的代碼中沒有「未定義」。你可以在這裏看到結果:http://jsfiddle.net/jfriend00/94yLngj6/。你可能打算寫'alert(「Hello,」+ a1.identify());'實際運行'a1.identify()'不只是打印出函數本身,但是當我運行上面的jsFiddle,沒有什麼顯示爲「未定義」。 – jfriend00
感謝您的快速回復。是的,這是因爲我沒有a1.identify()在警報或沒有調用a1.identify2()()..謝謝你讓我意識到這一點!謝謝你倆的快速回答。嗯,還有,我在Chrome開發者工具中運行這個工具,並且當我以原始文章的形式運行代碼時,我還沒有定義它。 – user3502374