标签:
1 var name = "outer"; 2 var myObj = { 3 name : "inner", 4 getName : function () { 5 return this.name; 6 } 7 }; 8 console.log(myObj.getName()); //inner,this指向myObj
1 var name = "outer"; 2 var myObj = { 3 name : "inner", 4 getName : function () { 5 return function(){ 6 return this.name; 7 }; 8 } 9 }; 10 console.log(myObj.getName()()); //outer,this指向window
解决办法为
1 var name = "outer"; 2 var myObj = { 3 name : "inner", 4 getName : function () { 5 var that = this; 6 return function(){ 7 return that.name; 8 }; 9 } 10 }; 11 console.log(myObj.getName()()); //inner
1 function Dog (color) { 2 this.color = color; 3 } 4 Dog.prototype.getColor = function (){ 5 return this.color; 6 }; 7 var dog = new Dog("yellow"); //this绑定到dog上 8 console.log(dog.getColor()); //yellow
1 var name = "outer"; 2 var myObj = { 3 name : "inner", 4 getName : function () { 5 return this.name; 6 } 7 }; 8 9 console.log(myObj.getName()); //inner,this指向myObj 10 console.log(myObj.getName.apply(window)); //outer,this指向window
总结:在调用函数时,对参数this及arguments的搜索不遵守作用域链规则
标签:
原文地址:http://www.cnblogs.com/webliu/p/4715423.html