我意識到這已經被提出了數百次,但是我似乎無法理解JavaScript中「爲什麼」原型的概念是正確的,因爲模仿類(是的,我知道JavaScript是一種基於原型的語言 - 我收集了很多)。像許多其他人一樣,我努力使JavaScript成爲我使用的日常語言,我習慣於使用常規的OOP類風格,正如我在Java中玩過的(並且在ActionScript和PHP中使用類)。然而,雖然我認爲我明白原型的工作原理,但似乎無法理解爲什麼需要它們。試圖理解JavaScript中原型的意義
這裏有一個如何我目前在JavaScript中瞭解我的原型示例腳本:
var Apple = function() {
// An apple?
};
Apple.prototype.color = "red";
Apple.prototype.changeColor = function(new_color) {
this.color = new_color;
};
Apple.prototype.getColor = function() {
alert('color: '+this.color);
};
var apple1 = new Apple();
var apple2 = new Apple();
apple2.changeColor("green");
apple1.getColor();
apple2.getColor();
...我曾以爲也許原型意味着它共享相同的對象,而不僅僅是創建一個新對象每次 - 然而,顯然情況並非如此,因爲apple1和apple2都有不同的顏色,仍然(在運行所述腳本之後)。
然後我寫它更重要的是一個面向對象的腳本:
var Apple = function() {
this.color = "red";
this.changeColor = function(new_color) {
this.color = new_color;
};
this.getColor = function() {
alert('color: '+this.color);
};
};
var apple1 = new Apple();
var apple2 = new Apple();
apple2.changeColor("green");
apple1.getColor();
apple2.getColor();
完全相同的結果(如預期)。 ...爲什麼後面的代碼不被推薦?我沒有問題使用原型(假設我正確使用它們),但我需要了解「爲什麼」的概念。
...有什麼幫助嗎?
這實際上非常有幫助;謝謝。在引用`Apple.prototype.color`後,我可以看到它仍然是「紅色」,這再次確認了我最初關於引用單個對象的原型的想法。這仍然有點令人困惑,因爲我想直接指定我的方法......功能,但是我想我可能已經掌握了它的方法。再次感謝。 – clicheName 2011-01-30 05:13:15