【发布时间】:2020-08-07 04:35:19
【问题描述】:
我正在将此代码 sn-p 复制到 Chrome 的控制台中。
function F() {};
F.prototype.fMethod = function WOT() {console.log(this)};
function G() {};
Object.setPrototypeOf(G.prototype, {...F.prototype.fMethod, ...Object.prototype})
console.log(Object.getPrototypeOf(G.prototype));
我期望Object.getPrototypeOf(G.prototype) 返回的是
{
function WOT, //the content/properties of the object `F.prototype.fMethod` points to.
constructor: ... //the content/properties of the object Object.prototype points to.
hasOwnProperty: ...
isPrototypeOf: ...
}
您可以在此处查看我在 Chrome 控制台上获得的信息:
【问题讨论】:
-
你是在尝试做
Function.prototype.method = function() {console.log(this)}吗?你为什么要以一种令人费解的方式来做这件事? -
你不应该使用
__proto__! developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
@slebetman 我正在尝试 i)首先确认单继承的含义(我读到 JavaScript 就是这样做的)和 ii)如果我对单继承的理解是正确的,我试图通过使
Function.prototype.__proto__指向包含 2 个Constructor.prototypes - 1 来自Object和另一个来自F的对象来“破坏”它 -
@tonitone120 我刚刚看到这个问题 - 我不确定你最初问的是什么,但在修订版中,你似乎误解了对象扩展符号的作用。您看到一个空对象作为输出的原因是您正在传播的两个对象(一个没有添加特殊属性的函数对象和
Object.prototype)都没有可枚举的属性。 -
这只是因为扩展语法(
...)只为您提供了可枚举的属性。这不是我非常了解的领域,我不能给你任何明确的参考,但我的理解是...obj迭代obj以(在这种情况下)将其键和值添加到对象正在定义 - 但迭代对象的默认行为是忽略不可枚举的属性。
标签: javascript