繁体   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