javascript - 为什么Function.prototype不能修改?

标签 javascript prototypal-inheritance

Function.prototype页面是这样写的:

Function objects inherit from Function.prototype. Function.prototype cannot be modified.

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

function AclassName(){
    return 2;
}

// AclassName ---> Function.prototype ---> Object.prototype ---> null

而且我认为总是可以扩展类原型(prototype),例如:

AclassName.prototype.color = "somevlue";

那么 i 无法被修改是什么意思?

最佳答案

JS 中的所有内容都有原型(prototype)(即使它为 null)。因此,实际函数的原型(prototype)是Function.prototype

当您在示例中分配或修改 AclassName.prototype 时,您正在为 AclassName实例设置原型(prototype)。请注意,对象x 的原型(prototype) x.prototype 不同。如果 x 用作构造函数,则 .prototype 用于设置将用于 x 的实例的原型(prototype)。

换句话说:

function AClassName () {} 声明的函数 AClassName 是 Function 类的对象,因此它继承自 Function.prototype.

如果您实例化该类:

var myInstance = new AClassName();

那么myInstanceAClassName类的一个对象,因此它继承自AClassName.prototype

因此,回答您问题的根源:Function.prototype 无法修改,因为它是语言的核心部分,更改它可能会带来性能或安全问题。但是,您完全可以自由地修改自己的类的原型(prototype)。

关于javascript - 为什么Function.prototype不能修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34897762/

相关文章:

javascript - Jquery Mobile - onhashchange 问题

javascript - 检测英语或法语中未找到的所有口音

javascript - Stylelint 作为 npm 脚本无声地失败

Javascript调用基类构造函数

javascript - 在 JavaScript 中从父级调用子方法

javascript - 单个解构赋值,用于从 RegExp.exec() 返回的结果中获取值

javascript - 如何使用php编辑txt文件内容?

Javascript 伪经典继承 vs 函数式继承

Javascript 扩充基本类型(原型(prototype)继承)

JavaScript 继承 : When where's my derived members?