var obj1 = {name : "blue",fn : function(){alert(this.name);}};
var newFunction = obj1.fn;
newFunction();
为啥alert的是空,确不是undefined ?
var obj1 = {name : "blue",fn : function(){alert(this.name);}};
var newFunction = obj1.fn;
newFunction();
为啥alert的是空,确不是undefined ?
玩一下这个就清楚了
var obj1 = {name: 'blue', fn : function(){alert(this.name);}};
obj1.fn();
var newFunction = obj1.fn;
newFunction();
//----------------------------------------------------
var obj2 = {here_do_not_use_name_as_var_name: 'blue',fn : function(){alert(this.here_do_not_use_name_as_var_name);}};
obj2.fn();
var newFunction2 = obj2.fn;
newFunction2();
function 有自己的 name
2 回答1.3k 阅读✓ 已解决
1 回答987 阅读✓ 已解决
2 回答849 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
2 回答906 阅读
1 回答891 阅读
1 回答820 阅读
(1)this跟调用者有关,而不是和定义的位置有关,var newFunction = obj1.fn;这句话创建了fn的一个引用叫newFunction,而不是obj.fn,这里原来fn就脱离了obj1,所以调用的作用域是window,这样就读不到obj1.name了
(2)name在window中有定义,如果在跨域中经常会修改这个属性,所以window.name存在而且为空,不是undefined
建议阅读you don't know js这一系列书,特别讲解了this作用域的四个判据,其中有例子就提到了什么写法会导致类中的函数脱离原有作用域