Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不能修改Function.prototype?_Javascript_Prototypal Inheritance - Fatal编程技术网

Javascript 为什么不能修改Function.prototype?

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.prototype。功能原型 无法修改

或者在javascript中,除了继承和原型链接之外没有类,构造函数实际上是函数:

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、 e
foo.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、 e
foo.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;}如果
功能。原型
无法修改?