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),这点以后论证
那么首先:this
(object.getName = object.getName)(); //"The Window" //等价于 (object.getName = function(){ console.log(this.name); })(); //"The Window"
并且赋值语句返回是后者,那么就是:code
(object.getName = object.getName)(); //"The Window" //等价于 (function(){ console.log(this.name); })(); //"The Window"
其实,括号里就是一个匿名函数,直接在全局环境当即执行,天然this.name就是全局环境中的name变量的值。get
论证赋值表达式,返回值是后者,借鉴自网上看到的方法:io
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); //输出20
change函数运行后,输出的是赋值语句的后者arg的值10(此时test.num值是20)。console