[英]Why Function.prototype cannot be modified ?
在Function.prototype頁面中這樣寫:
函數對象繼承自Function.prototype。 Function.prototype無法修改。
或者在javascript中,除了繼承和原型鏈(其中構造函數實際上是函數)之外,沒有任何類:
function AclassName(){
return 2;
}
// AclassName ---> Function.prototype ---> Object.prototype ---> null
而且我認為始終可以擴展類原型,例如:
AclassName.prototype.color = "somevlue";
那我不能被修改意味着什么?
JS中的所有內容都有一個原型(即使它為null)。 因此,實際function
的原型是Function.prototype
。
在示例中分配或修改AclassName.prototype
時,您正在設置AclassName
實例的AclassName
。 請注意,對象x
的原型與 x.prototype
。 如果將x用作構造函數,則.prototype
用於設置將用於x 實例的原型。
換一種方式:
使用function AClassName () {}
聲明的function AClassName () {}
是Function類的對象,因此它繼承自Function.prototype
。
如果您實例化該類:
var myInstance = new AClassName();
然后myInstance
是類AClassName的對象,因此它繼承自AClassName.prototype
。
因此,請回答您問題的根源:無法修改Function.prototype
,因為它是語言的核心部分,並且能夠對其進行更改可能會引入性能或安全性問題。 但是,您完全可以自由修改自己的類的原型。
我必須指出:Function的原型是Function.prototype
,但是像foo這樣的特定函數,它的原型不是Function.prototype
。
Function.prototype
是可調用的對象,它是一個“函數” (typeof Function.prototype).foo.prototype
是一個“對象”。 當您的Function構造函數構造類似foo的函數時,它將運行代碼: this.prototype={constructor:this}
(來自“ JavaScript:好的部分”,Douglas Crockford); 即foo.prototype={constructor:foo}
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.