的Javascript功能都可以在一個對象的原型是這樣聲明:原型函數在JavaScript中如何與正常函數不同?
<object name>.prototype.<variable name>=function(){
//
//
}
如何它這方面比下面的聲明有什麼不同?
<object name>.<variable name>=function(){
//
//
}
原型函數在JavaScript中如何與正常函數不同?
的Javascript功能都可以在一個對象的原型是這樣聲明:原型函數在JavaScript中如何與正常函數不同?
<object name>.prototype.<variable name>=function(){
//
//
}
如何它這方面比下面的聲明有什麼不同?
<object name>.<variable name>=function(){
//
//
}
原型函數在JavaScript中如何與正常函數不同?
在基礎對象的原型上聲明的函數被該對象類型的所有實例繼承。
例如..
String.prototype.foo = function() {
return 'bar';
};
現在,每個字符串將有函數foo()可用。
'test'.foo(); // returns 'bar'
瞭解更多關於基於原型繼承here
+1此外,值得明確指出的功能*和*性能上的對象的原型,宣佈由該對象的所有實例,*即使是那些已經被實例化。* – 2009-12-09 03:33:45
是的,好點的繼承。最後一部分非常重要。在成員被認爲是'未定義'之前,原型有點作爲最後一個捕獲,因此修改原型也會影響現有對象。 – Matt 2009-12-09 03:36:48
原型函數實例函數,而正常的功能是「靜態」的功能。在類的原型上聲明的函數將在該類的所有實例上提供。
var MyClass = function(){
};
MyClass.staticFunction = function(){alert("static");};
MyClass.prototype.protoFunction = function(){alert("instance");};
MyClass.staticFunction(); //OK
MyClass.protoFunction(); //not OK
var myInstance = new MyClass();
myInstance.staticFunction(); //not OK
myInstance.protoFunction(); //OK
+1這是我見過的最簡潔的解釋。 – 2010-06-13 18:22:33
馬特和伊戈爾已經提供了足夠的代碼示例,但你可以閱讀的最好的文章(短,正確的,給點)之一是Prototypal Inheritance,由Douglas Crockford的。
請重新短語,一個真正的問題可以回答。 – gahooa 2009-12-09 03:10:23
@gahooa:你爲什麼認爲這個問題不能回答。這可能是非常高的水平,但它仍然是一個問題。您可以隨時對其進行編輯以使其更清晰。無需下來投這個語法錯誤,只是因爲...... – Josh 2009-12-09 03:13:18
http://stackoverflow.com/questions/186244/what-does-it-mean-that-javascript-is-a-prototype-based-language – 2009-12-09 03:13:39