为什么'this'在这种情况下不起作用
Why does 'this' not work in this instance?
这样不行:
var myObj = {
name : 'luke',
age : '24',
myFunc: (function() {
console.log(this.name); //returns nothing
}())
};
如果我使用这个:
var myObj = {
name : 'luke',
age : '24',
myFunc: (function() {
console.log(myObj.name); //it works
}())
};
第5行第一个例子中的'this'失败的原因是什么?
this
的值是由Javascript解释器根据函数的调用方式设置的,而不是函数的声明方式。
在这种情况下,您将调用函数作为一个正常的函数,因此this
将被设置为全局对象(在浏览器中是window
)或undefined
(在严格模式下)。
声明的这一部分:
(function() {
console.log(this.name); //returns nothing
}())
只是一个正常的IIFE函数调用,因此this
被设置为window
或undefined
(如果在严格模式下)。
关于this
可以由调用代码控制的五种不同方式的完整描述,请参阅此回答。
此外,你的myFunc
属性结束undefined
,因为你有一个IIFE作为值,但是IIFE不返回任何东西,所以返回值是undefined
,因此myFunc
属性的结果值是undefined
。
既然你似乎很难理解你的IIFE是如何工作的,你的代码在这里:
var myObj = {
name : 'luke',
age : '24',
myFunc: (function() {
console.log(this.name); //returns nothing
}())
};
的计算结果与以下相同:
function aFunc() {
console.log(this.name);
}
var myObj = {
name : 'luke',
age : '24',
myFunc: aFunc()
};
并且,从这里,您应该能够看到aFunc()
是一个正常的函数调用,导致Javascript将该函数中的this
设置为window
或undefined
(如果在严格模式下)。
因为在下面的代码声明中
myFunc: (function() {
console.log(this.name); //returns nothing
}())
this
将指向window
对象。
如果你用删除。name
来替换上面的代码块myFunc: (function() {
console.log(this); //Outputs window object on the console.
}())
无论哪种方式,它们都是自执行的函数,它们不返回任何值,唯一的事情是在定义对象时,您可以看到它们的控制台输出。如果执行第一个,可以在控制台输出的第二个window
对象中看到window.name
。
相关文章:
- 为什么jQuery悬停方法在这种情况下不起作用
- 为什么push方法没有'在这种情况下不起作用:[].推
- 鼠标事件's在CtrlKey不起作用的情况下单击
- 在 Javascript 不起作用的情况下为数字添加逗号
- 在 jQuery 不起作用的情况下迭代变量
- 在jQuery不起作用的情况下阻止表单提交
- 为什么getElementbyId在这种情况下不起作用
- 为什么在这种情况下“最终”在 RxJS 中不起作用
- 为什么在这种情况下,绑定在淘汰赛中不起作用
- 为什么原型JavaScript在这种情况下不起作用
- 为什么隐藏/显示(向上滑动/向下滑动)在这种情况下不起作用
- 键入.js脚本在iPhone6中不起作用,如果任何单词将在该行完成,在这种情况下,另一个单词不键入,仅显示光标
- 在 if 条件不起作用的情况下使用 .hasClass()
- 为什么表单序列化在这种情况下不起作用
- 淘汰:在对象不起作用的情况下进行多选
- 在ajax不起作用的情况下在sql中插入数据
- jQuery在Wordpress中不起作用-默认情况下起作用
- 在JQuery不起作用的情况下更改显示
- 在事件处理程序不起作用的情况下调用代码隐藏
- 使用document.cookie删除firefox上不起作用的cookie.下面的