[英]JavaScript `this` examples from MDN and books not working ... why?
我想了解JS this
是因为它已经太混乱了我太久,也没有人给我一个解释,我可以迄今理解。 我去了 MDN 并从他们的文档中尝试了一个简单的代码示例。 从他们的页面直接复制的代码如下(控制台日志是我唯一的补充):
var obj = {a: 'Custom'}
var a = 'Global'
function whatsThis () {
return this.a
}
console.log(whatsThis())
console.log(whatsThis.call(obj))
console.log(whatsThis.apply(obj))
根据 MDN,输出应该是:
Global
Custom
Custom
相反,我得到
undefined
Custom
Custom
难以置信,我尝试从一定程度上著名的一个例子你不知道JS系列,书2章2,关于this
。 我逐字地尝试了以下示例:
function foo() {
console.log( this.a );
}
var a = 2;
foo();
这本书说输出应该是2
,但我得到undefined
。
这正是我想了解更多相关信息的this
,但即使是书籍和 MDN 直接代码示例也不适合我,这让我很难将注意力集中在 JS 的核心概念上。 请帮我把这个放在我的脑海里。
在 Node.js 模块中用var
声明的变量不会在全局对象上结束——模块有自己的作用域。 您可以显式地将要读取的属性放在全局对象上:
global.a = 'Global';
global.a = 2;
(在浏览器中,它是window
而不是global
,或者您可以为两者使用新的可移植globalThis
。)
但是,您无需过多担心这种行为。 在严格模式下,您应该始终使用(并且将在类和 ES 模块等新功能中自动应用),像whatsThis()
this
的普通函数调用的whatsThis()
只是undefined
。
'use strict'; function whatsThis() { console.log('this is ' + this); } let obj = { whatsThis, }; whatsThis(); whatsThis.call('a string'); obj.whatsThis();
Node 中的全局对象本质上不应该被使用,并且在浏览器脚本的顶层使用var
声明变量同样是不好的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.