Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么`window.console.log(this)`不记录控制台对象?_Javascript_Oop_Javascript Objects_Prototypal Inheritance - Fatal编程技术网

Javascript 为什么`window.console.log(this)`不记录控制台对象?

Javascript 为什么`window.console.log(this)`不记录控制台对象?,javascript,oop,javascript-objects,prototypal-inheritance,Javascript,Oop,Javascript Objects,Prototypal Inheritance,我刚刚进入高级上下文实例化,使用原型链等 我很好奇window.console对象是如何创建的,这样函数log就认为它的上下文是窗口实例,而不是控制台。这与对象有关。创建新的关键字,还是绑定/self=this window.console有一个构造函数(console),我很好奇调用构造函数的最干净的方法是什么,传递窗口实例/上下文?把它作为参数传递进来??如果Console是一个独立的构造函数,我认为Window应该是一个用新上下文来构造它的构造函数,而不是说 windowInstance.

我刚刚进入高级上下文实例化,使用原型链等

我很好奇
window.console
对象是如何创建的,这样函数
log
就认为它的上下文是窗口实例,而不是控制台。这与
对象有关。创建
新的
关键字,还是绑定/self=this

window.console
有一个构造函数(console),我很好奇调用构造函数的最干净的方法是什么,传递窗口实例/上下文?把它作为参数传递进来??如果Console是一个独立的构造函数,我认为Window应该是一个用新上下文来构造它的构造函数,而不是说

windowInstance.console.log = function (args) {

}.bind(windowInstance, args);
基本上,我在想象这样的布局,但不明白
这个
是如何路由的

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
}
如果您有:

var obj = { hello: "world" };
console.log(obj);
控制台显示了该对象,您会感到惊讶吗?那么同样的道理,

console.log(this);
记录
的值,因为它在对控制台函数的调用之外。您不能强制
console.log()
记录它认为
的值在它自己的参考框架中;API中没有这方面的规定(因为坦率地说,它不是很有用)。如果要记录
window.console
对象的状态,您可以:

console.log(window.console);
如果你有:

var obj = { hello: "world" };
console.log(obj);
控制台显示了该对象,您会感到惊讶吗?那么同样的道理,

console.log(this);
记录
的值,因为它在对控制台函数的调用之外。您不能强制
console.log()
记录它认为
的值在它自己的参考框架中;API中没有这方面的规定(因为坦率地说,它不是很有用)。如果要记录
window.console
对象的状态,您可以:

console.log(window.console);

您的代码没有记录任何内容:不清楚“但是日志认为它是窗口”是基于什么的。这是一切的方式,而不仅仅是
console.log
。我可能错了,但据我所知,
这个
的范围在执行过程中很重要;如果它是从一个函数中执行的,那么它的父函数应该是
this
,但是,您正在窗口的范围内执行它。您正在将
this
传递到函数中。这将记录
this
的值,因为它位于
控制台.log()的外部,而不是
this
的内部。@Pointy我试图这么说,但不幸的是我的措辞没有你的有效:/@Daedalus ha,不,我在输入我的评论后看到了你的评论,我同意你说的是同一件事。你的代码没有记录任何东西:不清楚“但是日志认为它是窗口”是基于什么。这是所有事情的方式,而不仅仅是
console.log
。我可能错了,但据我所知,
这个
的范围在执行过程中很重要;如果它是从一个函数中执行的,那么它的父函数应该是
this
,但是,您正在窗口的范围内执行它。您正在将
this
传递到函数中。这将记录
这个
的值,因为它在
控制台.log()的外部,而不是
这个
的内部。@Pointy我试图这么说,但不幸的是我的措辞没有你的那么有效:/@Daedalus-ha,不,我在键入我的后看到了你的评论,我同意你在说同样的话。