js中this指向问题: (object.getName = object.getName)()为何返回“window”
2018-03-10 15:55
776 查看
var name = "The Window"; var object = { name : "My Object", getName: function(){ console.log(this.name); } }; object.getName(); //My Object (object.getName = object.getName)(); //"The Window"输出My Object的原因,就不谈了啊。
最后一行输出结果,js高级程序一书中一笔带过,不理解的小伙伴可以看下:
object.getName = object.getName这是个赋值语句,赋值语句返回的是后者,
举例:
return a = b; (返回的是b),这点之后论证那么首先:
(object.getName = object.getName)(); //"The Window" //等价于 (object.getName = function(){ console.log(this.name); })(); //"The Window"而且赋值语句返回是后者,那么就是:
(object.getName = object.getName)(); //"The Window" //等价于 (function(){ console.log(this.name); })(); //"The Window"其实,括号里就是一个匿名函数,直接在全局环境立即执行,自然this.name就是全局环境中的name变量的值。论证赋值表达式,返回值是后者,借鉴自网上看到的方法:
var test = { set num(param){}, get num(){ return 20; }, }; function change(arg){ return test.num = arg; } console.log(change(10)); //输出10 console.log(test.num); //输出20change函数运行后,输出的是赋值语句的后者arg的值10(此时test.num值是20)。文章来源:北大青鸟学校开发小组
相关文章推荐
- 小tips:JS中this操作执行像(object.getName = object.getName)()操作改变了this
- 有关多线程中this.getName()和Thread.currentThread().getName()返回名字不一样的问题
- 多线程中this.getName()和Thread.currentThread().getName()返回名字不一样的问题
- js中setTimeout的this指向问题
- 关于JS中for循环时,作用域问题和this指针指向的总结
- 解决js绑定事件this指向发生改变的问题
- js中的this指向问题
- 解决js中的window.open返回object的错误 .
- js中的window.open返回object的错误的解决方法
- 解决js绑定事件this指向发生改变的问题
- js中this指向问题实例详解
- 原生js方法document.getElementsByClassName在ie8及其以下的兼容性问题
- js通过window.external调用delphi的返回值类型问题解决方案,不解的COM问题
- js中用window.open()打开多个窗口的name问题
- js中this的指向问题
- js中this指向问题
- js中的window.open返回object的错误
- 返回object问题,在window.open后
- js绑定事件this指向发生改变的问题解决方法
- what's this? 浅谈js中this的指向问题