JS中的“this”

1. this的使用

关于this,懂点Java就应该知道,this有以下用法:

1、在类的方法定义中使用的this关键字代表调用该方法对象的引用。
2、当必须指出当前使用方法的对象是谁时,要使用关键字this。
3、有时使用this可以处理方法中成员变量和参数重名的情况。
4、this可以看做是一个变量,它的值是当前对象的引用。


简而言之,就是谁调用的含有this的语句,this就指向谁
来个例子:

var member = 88;
var obj = {
    member: 12,
    getMember: function(){
        alert(this.member);
    }
};
obj.getMember();        //12
(obj.getMember)();      //12
(obj.getMember = obj.getMember)();  //88

//obj.getMember() 中调用getMember的方法的是obj,obj.getMember是成员的访问,而getMember()是函数的调用,且前者的优先级是高于后者的,先执行的是obj.getMember,所以this 就是 obj

//(obj.getMember)() 与前面的相比,就是增加了一对括号,提高了优先级,但是本质上这个括号的加上的结果就是执行顺序还是没有改变,因此 this 就是 obj

//(obj.getMember = obj.getMember)() 在函数调用之前先执行的是一个赋值语句,赋值语句的优先级本身是比较低的,加上括号提高了优先级,执行完赋值语句就相当于下面的效果
    (funtion(){
        alert(this.member);
    })();
此时的this 就是 window

当然通过applycallbind还是可以修改this的,当然这三种方法也是有区别的,我们来顺便看看.


2. applycallbind 的使用

var obj1 = {
    member: "Linda",
    getMember: function(){
        return this.member;
    },
    sayName: function(){
        alert(this.getMember());
    }
};
var obj2 = {
    member: "Lily",
    getMember: function(){
        return this.member;
    }
};

obj1.sayName.call(obj2);   //Lily
obj1.sayName.apply(obj2);   //Lily
obj1.sayName.bind(obj2)();   //Lily

bind的使用方法很明显是不同的,call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,所以需要加上()再调用的。


2. applycall 的区别

var obj1 = {
    member: "Linda",
    getMember: function(){
        return this.member;
    },
    sayName: function(age, friend){
        alert(this.getMember() + "今年" + age + "岁,朋友有" + friend);
    }
};
var obj2 = {
    member: "Lily",
    getMember: function(){
        return this.member;
    }
};
obj1.sayName.apply(obj2, ["19", "Vam"]);   //Lily今年19岁,朋友有Vam
obj1.sayName.call(obj2, "19", "Vam");      //Lily今年19岁,朋友有Vam

很明显可以通过上面的例子看出,callapply传参数的方式是略微有差别的,call需要将参数一个个用逗号隔开,直接列举,而apply是将要传的参数放在一个数组里的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值