在Function.prototype页面中写道:
函数对象继承自Function.prototype。 Function.prototype的 无法修改。
或者在javascript中没有类,但是继承和原型链在其中构造函数实际上是函数:
function AclassName(){
return 2;
}
// AclassName ---> Function.prototype ---> Object.prototype ---> null
我认为总是可以扩展类原型,如:
AclassName.prototype.color = "somevlue";
那么我无法修改是什么意思?
答案 0 :(得分:0)
JS中的所有内容都有一个原型(即使它是null)。因此,实际function
的原型是Function.prototype
。
在您的示例中指定或修改AclassName.prototype
时,您正在为AclassName
的实例设置原型。请注意,对象x
的原型与 x.prototype
不同。 .prototype
用于设置将用于x的实例的原型,如果x用作构造函数。
换句话说:
使用function AClassName () {}
声明的函数AClassName是类函数的对象,因此它继承自Function.prototype
。
如果您实例化该类:
var myInstance = new AClassName();
然后myInstance
是 AClassName 类的对象,因此它继承自AClassName.prototype
。
因此,要回答问题的根源:Function.prototype
无法修改,因为它是语言的核心部分,并且能够更改它可能会引入性能或安全问题。但是,您可以完全自由地修改自己类的原型。
答案 1 :(得分:0)
我必须指出:函数的原型是Function.prototype
,但是像foo这样的特定函数,它的原型不是Function.prototype
。
Function.prototype
是一个可调用的对象,它是一个“函数”(typeof Function.prototype).foo.prototype
是一个“对象”。当Function构造函数构造一个像foo这样的函数时,它会运行一个代码:this.prototype={constructor:this}
(这来自“The JavaScript:good parts”,Douglas Crockford);即foo.prototype={constructor:foo}
。