Javascript 为什么不能修改Function.prototype?
页面上写着: 函数对象继承自Function.prototype。功能原型 无法修改 或者在javascript中,除了继承和原型链接之外没有类,构造函数实际上是函数:Javascript 为什么不能修改Function.prototype?,javascript,prototypal-inheritance,Javascript,Prototypal Inheritance,页面上写着: 函数对象继承自Function.prototype。功能原型 无法修改 或者在javascript中,除了继承和原型链接之外没有类,构造函数实际上是函数: function AclassName(){ return 2; } // AclassName ---> Function.prototype ---> Object.prototype ---> null 我认为总是可以像这样扩展类原型: AclassName.prototype.color =
function AclassName(){
return 2;
}
// AclassName ---> Function.prototype ---> Object.prototype ---> null
我认为总是可以像这样扩展类原型:
AclassName.prototype.color = "somevlue";
那么,我不能被修改意味着什么呢?JS中的所有东西都有一个原型(即使它是空的)。因此,实际
函数的原型是函数。原型是函数
在示例中分配或修改AclassName.prototype
时,您正在为AclassName
的实例设置原型。请注意,对象的原型x
与x.prototype
不同。如果x被用作构造函数,则.prototype
用于设置将用于x实例的原型
换言之:
用函数AClassName(){}
声明的函数AClassName是类函数的对象,因此它继承自函数.prototype
如果实例化该类:
var myInstance = new AClassName();
然后myInstance
是类AClassName的对象,因此它继承自AClassName.prototype
因此,要回答您问题的根源:Function.prototype
无法修改,因为它是语言的核心部分,能够更改它可能会带来性能或安全问题。但是,您完全可以自由修改自己类的原型。JS中的所有内容都有一个原型(即使它为null)。因此,实际函数的原型是函数。原型是函数
在示例中分配或修改AclassName.prototype
时,您正在为AclassName
的实例设置原型。请注意,对象的原型x
与x.prototype
不同。如果x被用作构造函数,则.prototype
用于设置将用于x实例的原型
换言之:
用函数AClassName(){}
声明的函数AClassName是类函数的对象,因此它继承自函数.prototype
如果实例化该类:
var myInstance = new AClassName();
然后myInstance
是类AClassName的对象,因此它继承自AClassName.prototype
因此,要回答您问题的根源:Function.prototype
无法修改,因为它是语言的核心部分,能够更改它可能会带来性能或安全问题。但是,您完全可以自由修改自己类的原型。我必须指出:函数的原型是Function.prototype
,但是像foo这样的特定函数,它的原型不是Function.prototype
Function.prototype
是一个可调用的对象,它是一个“函数”(typeof Function.prototype)。foo.prototype
是一个“对象”。当你用函数构造函数构造一个像foo这样的函数时,它会运行一个代码:this.prototype={constructor:this}
(这来自于Douglas Crockford的“JavaScript:good parts”);i、 efoo.prototype={constructor:foo}
我必须指出:函数的原型是Function.prototype
,但像foo这样的特定函数,它的原型不是Function.prototype
Function.prototype
是一个可调用的对象,它是一个“函数”(typeof Function.prototype)。foo.prototype
是一个“对象”。当你用函数构造函数构造一个像foo这样的函数时,它会运行一个代码:this.prototype={constructor:this}
(这来自于Douglas Crockford的“JavaScript:good parts”);i、 efoo.prototype={constructor:foo}
这意味着你绝不能弄乱像函数这样重要的功能。覆盖其他对象上的方法会产生不利影响,但是函数
对象对于任何其他方法和函数都是必要的,因此您根本不允许对其进行修改。这意味着您决不允许干扰像函数
这样重要的功能。覆盖其他对象上的方法会产生不利影响,但是函数
对象对于任何其他方法和函数都是必要的,因此您根本不允许修改它。您知道为什么我们可以这样做吗:function.prototype.method=function(name,func){this.prototype[name]=func;返回此;}
如果Function.prototype
无法修改?您知道我们为什么可以这样做吗:Function.prototype.method=Function(name,func){this.prototype[name]=func;返回this;}代码>如果功能。原型无法修改?