为什么Function.prototype不能修改?
Why Function.prototype cannot be modified ?
在Function.prototype页面是这样写的:
Function objects inherit from Function.prototype. Function.prototype
cannot be modified.
或者在 javascript 中没有 classes 但构造函数实际上是函数的继承和原型链 :
function AclassName(){
return 2;
}
// AclassName ---> Function.prototype ---> Object.prototype ---> null
而且我认为总是可以扩展 class 原型,例如:
AclassName.prototype.color = "somevlue";
那我不能修改是什么意思?
JS 中的一切都有一个原型(即使它是 null)。因此,实际 function
的原型是 Function.prototype
.
当您在您的示例中分配或修改 AclassName.prototype
时,您正在为 AclassName
的 个实例 设置原型。请注意,对象 x
的原型 与 x.prototype
不同。如果 x 用作构造函数,.prototype
用于设置将用于 x 的 实例 的原型。
换句话说:
你的函数 AClassName,用 function AClassName () {}
声明,是 class Function 的对象,所以它继承自 Function.prototype
。
如果你实例化 class:
var myInstance = new AClassName();
那么myInstance
是classAClassName的对象,所以继承自AClassName.prototype
.
所以回答你问题的根源:Function.prototype
不能被修改,因为它是语言的核心部分并且能够改变它可能会引入性能或安全问题。但是,您完全可以自由修改自己的 classes.
原型
我必须指出that:the函数的原型是Function.prototype
,但是像foo这样的特定函数,它的原型不是Function.prototype
。
Function.prototype
是一个可调用对象,它是一个"function" (typeof Function.prototype).foo.prototype
是一个"object"。当你的 Function constructor 构造一个像 foo 这样的函数时,它运行一个代码:this.prototype={constructor:this}
(This is from "The JavaScript: good parts", Douglas Crockford);即 foo.prototype={constructor:foo}
.
在Function.prototype页面是这样写的:
Function objects inherit from Function.prototype. Function.prototype cannot be modified.
或者在 javascript 中没有 classes 但构造函数实际上是函数的继承和原型链 :
function AclassName(){
return 2;
}
// AclassName ---> Function.prototype ---> Object.prototype ---> null
而且我认为总是可以扩展 class 原型,例如:
AclassName.prototype.color = "somevlue";
那我不能修改是什么意思?
JS 中的一切都有一个原型(即使它是 null)。因此,实际 function
的原型是 Function.prototype
.
当您在您的示例中分配或修改 AclassName.prototype
时,您正在为 AclassName
的 个实例 设置原型。请注意,对象 x
的原型 与 x.prototype
不同。如果 x 用作构造函数,.prototype
用于设置将用于 x 的 实例 的原型。
换句话说:
你的函数 AClassName,用 function AClassName () {}
声明,是 class Function 的对象,所以它继承自 Function.prototype
。
如果你实例化 class:
var myInstance = new AClassName();
那么myInstance
是classAClassName的对象,所以继承自AClassName.prototype
.
所以回答你问题的根源:Function.prototype
不能被修改,因为它是语言的核心部分并且能够改变它可能会引入性能或安全问题。但是,您完全可以自由修改自己的 classes.
我必须指出that:the函数的原型是Function.prototype
,但是像foo这样的特定函数,它的原型不是Function.prototype
。
Function.prototype
是一个可调用对象,它是一个"function" (typeof Function.prototype).foo.prototype
是一个"object"。当你的 Function constructor 构造一个像 foo 这样的函数时,它运行一个代码:this.prototype={constructor:this}
(This is from "The JavaScript: good parts", Douglas Crockford);即 foo.prototype={constructor:foo}
.