他大概的意思正是這樣做之後,addMethod成爲可用於所有基本
對象
對象類型像字符串,數字等,這是因爲String對象是一個函數(但字符串創建的對象都沒有)。
例如,鑑於
var s = '';
你可以做
String.addMethod(...);
但不
s.addMethod(...);
JavaScript的類型系統的簡要介紹到這裏:
JavaScript並不有正常的課程概念。相反,通過將任何函數轉換爲構造函數,可以通過在調用時將new關鍵字放在它前面來達到相同的效果。
E.g:給予
function MyFunction(x) { this.myX = x; }
如果你調用它像
var myObj = new MyFunction(10);
它會創建一個名爲MyObj中的對象。這個對象將有一個名爲myX的成員變量。該函數myFunction是考慮對象的構造函數(並存儲在「構造」特性
(獎金的問題:如果你調用該函數上面沒有新的關鍵字,即var x = MyFunction(10)
會發生什麼,答案很可能驚奇任何明智的人)
現在您已經看到了如何將任意函數轉換爲構造函數。內建對象完全相同,字符串對象由函數String創建,數字由函數創建編號等
就像是由函數創建的那些內置的對象,每個對象的這些功能也是通過「功能」功能創建(亞克西!)。
現在到原型。
在上面的例子中
,如果你的地方寫
MyFunction.prototype.someNewMethod = function() {}
由MyFunction的構造函數創建的所有對象/功能會出現有所謂someNewMethod一個額外的成員函數。你可以用原型做很多其他有趣的事情,比如替換原型,或者替換原型的原型,但我不是這方面的專家。
不,這是JavaScript的執行原型繼承是愚蠢的。其奇怪的使用函數作爲構造函數樣式給你沒有原型的潛在優勢,但仍然與大多數程序員所理解的基於類的繼承無異。很高興能夠準確理解JavaScript原型正在做什麼,但不要期望突然明白爲什麼該模型有意義。因爲它不。 – bobince 2009-09-03 15:16:44