【发布时间】:2020-06-02 20:59:31
【问题描述】:
我有代码,其中LivingBeing 是超类型,Man 是子类型。我在他们两个上都定义了toString() 方法。考虑下面的代码:
function LivingBeing() {}
LivingBeing.prototype.toString = function () {
return "hi";
};
function Man() {}
Object.setPrototypeOf(Man.prototype, LivingBeing.prototype);
Man.prototype.toString = function () {
return window.toString();
};
let m1 = new Man();
console.log(m1.toString()); // Prints [object Window]
但如果我删除 window 上下文:
function LivingBeing() {}
LivingBeing.prototype.toString = function () {
return "hi";
};
function Man() {}
Object.setPrototypeOf(Man.prototype, LivingBeing.prototype);
Man.prototype.toString = function () {
return toString(); // Window context removed now; Rest code same
};
let m1 = new Man();
console.log(m1.toString()); // Prints [object Undefined]
浏览器不应该将上下文的缺失视为窗口吗?打给谁的toString()?
【问题讨论】:
-
Object.prototype.toString()
-
仍然是相同的
window.toString(因为它是唯一全局公开的同名事物),只是这次在没有window作为其上下文的情况下调用它,因为你是如何称呼它的。你可以省略所有这些类的东西来证明这一点。
标签: javascript