我正在进入高级上下文实例化,使用原型链等。
我很好奇如何创建window.console
对象,使得函数log
认为它的上下文是窗口实例,而不是控制台。这与Object.create
new
关键字或绑定/自我=这有关吗?
window.console
有一个构造函数(Console),我很好奇调用构造函数的最干净方法是什么,传递Window实例/上下文会是什么?把它作为一个参数传递?如果Console是一个单独的构造函数,我认为Window将是一个用新上下文构造它的人,而不是说
windowInstance.console.log = function (args) {
}.bind(windowInstance, args);
差不多,我想象这样的布局,但不明白this
如何被路由
var window = new Window();
window.console.log(this); // logs window
function Window () {
// this === window when constructed above
this.console = new Console();
}
function Console () {
this.log = function () {} // where this === window.console but log thinks it's window
}
由于
答案 0 :(得分:4)
如果你有:
var obj = { hello: "world" };
console.log(obj);
你会惊讶于控制台显示了这个对象吗?同样的道理,
console.log(this);
记录this
的值,因为在之外对控制台功能的调用。您无法强制console.log()
记录它认为this
的值在其自己的参考框架中的内容;在API中没有规定(因为坦率地说它不是很有用)。如果您想记录window.console
对象的状态,您可以:
console.log(window.console);