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