簡體   English   中英

為什么Function.prototype無法修改?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM