我在javascript中讀取原型,我寫了2個輸出完全相同的小js代碼。我只是想知道它們之間有什麼區別:Javascript對象原型
代碼1:
String.sam = function() { alert('fine') };
'ok'.sam();
代碼2原型:
String.prototype.sam = function() { alert('fine') };
'ok'.sam();
請澄清的差異,更好的辦法使用代碼。
謝謝
我在javascript中讀取原型,我寫了2個輸出完全相同的小js代碼。我只是想知道它們之間有什麼區別:Javascript對象原型
代碼1:
String.sam = function() { alert('fine') };
'ok'.sam();
代碼2原型:
String.prototype.sam = function() { alert('fine') };
'ok'.sam();
請澄清的差異,更好的辦法使用代碼。
謝謝
你的第一個例子不起作用。你在做什麼是創建字符串對象的靜態方法,所以你必須靜態調用它
//OK
String.sam();
//not OK, raises error
'hello'.sam();
在第二個例子中,關鍵字this
將把你怎麼稱呼它在弦上的實例。所以你可以做點像
String.prototype.sam = function() {
console.log(this.toUpperCase());
}
'hello'.sam(); // HELLO
這種技術雖然強大,但在某些方面卻令人f目結舌。它被稱爲游擊隊補丁,猴子拳擊或類似的東西。 有它被認爲是不好的幾個原因:
我想,你的第一個方法只用於此特殊屬性警報()方法添加。如果你想創建另一個實例,你必須再次做同樣的事情。使用原型可以更一般地定義它,因此您不必爲另一個實例再次執行相同的操作。
也許http://www.javascriptkit.com/javatutors/proto.shtml會幫助你更好地理解它。
自從你提到了所有涉及的陷阱之後,你能否在第二個例子中評論一個更好的選擇?我試圖把我的頭圍繞原型,並且很好奇。 – Chris 2011-05-27 23:17:47