首页 > js的this问题

js的this问题

var fullname = 'John Doe';

var obj = {

    fullname: 'Colin Ihrig',

    prop: {

        fullname: 'Aurelio De Rosa',

        getFullname: function() {

            return this.fullname;
       }
   }
}; 
var test = obj.prop.getFullname;

console.log(test());

让控制台出现Aurelio De Rosa,,apply和call,var that=this这3中方法可以吗?用这3种方式具体该怎么写?除了apply和call,var that=this,还有其他的方式吗?求解。谢谢大家


1)

console.log(obj.prop.getFullname());//Aurelio De Rosa 以方法调用方式

2)

var test=obj.prop.getFullname();
console.log(test.apply(obj.prop));//Aurelio De Rosa apply方式调用

3)

var test=obj.prop.getFullname();
console.log(test.call(obj.prop));//Aurelio De Rosa call方式调用

4)

var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
prop: (function(){
    var fullname='Aurelio De Rosa';
    return {
        getFullname:function(){
            return fullname;
        }
    }
})()
};
//Aurelio De Rosa 利用闭包使变量私有化

http://www.zhihu.com/question/20289071


让控制台出现Aurelio De Rosa

obj context 调用 getFullname 就能满足你的需求,apply, call, bind 只是具体实现方式,上面已经回答的很好啦。


楼上已经说了基于调用test时的改变,我说基于定义test的改变
1、可以通过将test改变为一个获取getFullname的值逻辑

var test = function(){return obj.prop.getFullname()};

2、使用bind功能

var test = obj.prop.getFullname.bind(obj.prop);

你这里面相当于

var test = function() {
    return this.fullname;
}

所以this指向window了。
可以这么写:
1.直接用 obj.prop调用

console.log(obj.prop.getFullname());

2.调用 test 上下文指向obj.prop

console.log(test.call(obj.prop));
console.log(test.apply(obj.prop));
【热门文章】
【热门文章】