繁体   English   中英

来自 MDN 和书籍的 JavaScript `this` 示例不起作用......为什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM