【发布时间】:2020-05-21 15:09:10
【问题描述】:
我目前正试图了解 javascript 内部结构和原型设计。目前让我感到困惑的一件事是,当我将 Object.prototype 分配给某个东西时,它似乎实际上并没有做任何事情,而不是当我对我定义的函数执行相同操作时(对于其他内置函数,如 Function.prototype 也是如此)。原型)。因此,当我在浏览器中运行以下命令时,我得到了一些意想不到的结果:
function A() {};
typeof A // "function"
console.log(A.prototype); // {constructor: ƒ} etc
A.prototype = null
console.log(A.prototype); // null
typeof Object // "function"
Object.prototype // {constructor: ƒ} etc
Object.prototype = null
Object.prototype // still {constructor: ƒ} etc, not null
这是为什么呢?仅仅是根据定义,所以 Object.prototype 无论如何总是相同的吗?如果是这样,我对 Object.prototype 的分配实际上有什么作用吗?
而且,也许这是一个主观问题,但如果是这样,那为什么不抛出错误呢?
【问题讨论】:
-
严格模式下会报错。出于明显的原因,这可能是不允许的。
-
等等,你问的是“对象”还是“对象”?因为这些是非常不同的东西。对象很简单:它在规范中。
-
可能试图为 Javascript 中创建的所有事物创建某种代理,同时保留 Object 的原始原型。然后很好奇为什么不允许分配。
标签: javascript prototype internals