关于javascript this指向问题

JavaScript 2014-05-16 this,面试题,JavaScript

这是偶然在一次调试中JavaScript发现的问题,把某个对象下的function传入某个函数,然后函数内再调用function,然而这样会导致被传入的function this指向有问题:

var F = function(name){
    this.name = name; 
};

F.prototype.getName = function(){
    return this.name;
};

var f = new F("哈哈");

var dosome = function(fun){
    if(typeof fun === "function"){
        return fun();
    }
};

f.getName();                    // 哈哈
dosome(f.getName);              // undefined
dosome.apply(f, [f.getName]);   // undefined

这个示例代码充分说明了几点:
1. function里的this一般指被调用着object
2. 然而第三个的执行结果似乎打乱了这点说明,虽然dosome此时的this已指向f实例,但getName还是会把this当做window处理,结果返回undefined

其实,上面的代码跟下面的有点类似:

var f = {
    name: "哈哈",
    getName: function(){
        return this.name;
    }
};

var dosome = function(fun){
    if(typeof fun === "function"){
        return fun();
    }
};

f.getName();                    // 哈哈
dosome(f.getName);              // undefined
dosome.apply(f, [f.getName]);   // undefined

所以要保持function内的this指向,得保持对象名+方法名调用,执行一个全局方法fun()相当于window.fun(),但是闭包内的虽然不能通过window命名空间调用,但某些情况下this仍然能指向window。如果要改变某个函数内的this执行可以使用apply或者call即可。

文字链接:《关于javascript this指向问题

文章地址:http://www.qttc.net/201405438.html

除非标注,琼台博客所有博文均为原创,转载请加文字链接注明来源

乳名?小名?昵称?网名?均可

email,放心,我不会给你乱投广告的

想获得回访就把你的站点URL写上(没有留空)

[NOTICE]木要投放广告
[NOTICE]木要骂人,说不该说的话
[NOTICE]自由言论,但要遵纪守法

Comments 4

  • 有代码确实好。
    2014-05-19 11:26:56 [ 跟帖 ]
    1 #
  • 友情链接还交换吗?
    2014-05-19 09:26:47 [ 跟帖 ]
    之前我貌似给你发过邮件,不知你收到没,即我准备与你交换链接的时候,被通知到外地出差了,很抱歉,预计本月25日能回来,所以26日我就能给你加上!
    2014-05-19 12:23:51 [ 跟帖 ]
    兄弟 链接还没加上?
    2014-05-28 10:58:51 [ 跟帖 ]
    2 #