this以及apply,call,bind之间的关系?

1、this是什么?

1、在全局环境中,this等于window。
2、构造函数中,this指向new出来的那个新的对象。
3、在函数中,this永远指向调用他的那个对象。
4、在箭头函数中this指向包裹着箭头函数的第一个函数。
5、在函数调用apply、call、bind时,this被强绑定在这个函数上。

2、改变this指向的方法apply()和call()

1、apply()方法接受两个参数,一是作用域,二是参数。

function test (test1, test2) {
console.log(test1 + test2);
}
function applyTest1 (test1, test2) {
return test.apply(this, [test1, test2]); // 传入数组
}
function applyTest2 (test1, test2) {
return test.apply(this, arguments); // 传入arguments
}
applyTest1 (50, 50); // 100
applyTest2 (50, 50); // 100

2、call()的使用和apply()基本是一样的,不同的是参数的传递,call()必须明确的传入每一个参数。

function test (test1, test2) {
console.log(test1 + test2);
}
function applyTest1 (test1, test2) {
return test.call(this, test1, test2); // 明确传入参数
}

3、bind方法

1、bind()的方法。这个方法会创建一个函数的实例,其this值会被绑定在bind()函数值中。

var name = "名字";
var person = {name: "小明"};
function sayHello () {
console.log(this.name + ': hello')
}
var personSay = sayHello.bind(person);
personSay(); // 小明:hello

上面例子通过bind将sayHello的实例赋给了personSay,同时将this指向了person对象,所以此时即使是在全局作用域中调用这个函数,也会看到sayHello实例上的this.name指向的是blue;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值