JavaScript 中call apply 与 bind方法

call,apply和bind都是Function原型中的方法。

作用就是就是改变this的指向。或者说 强行用其他对象来调用一个函数。除此之外还能在构造方法有中属性和函数的继承体现。

改变this指向的含义

function show(sex){
      console.log("姓名为"+this.yourname+",性别为"+sex);
 
    }
    var person={
      yourname:"张三",
      age:14
    };
    show.call(person,"男");//姓名为张三,性别为男
    show("男");//姓名为undefined,性别为男

在上面的代码块中,我们可以看到person对象并没有show方法,直接地用person.show()会报错。但是我们可以通过call方法来实现person对象来调用show方法。所以这种情况我认为就是改变了this的指向。

call和apply的使用方法相同。

call和apply的参数不同;
test.call ( this, param1 , param2 , param3 ) ; // 可以传多个参数
test.apply ( this, paramArray ) ; // 只能传两个参数,第二个一般为数组

call和apply会改变this指向,然后执行函数;

非严格模式下,如果参数不传,或者第一个参数是null/undefind,this都指向window。

严格模式下,第一个参数是谁,this就指向谁(包括null/undefind),不传this是undefind。

apply,传入的数组会以数组元素一个一个传入,而不是以整个数组传入。

bind会绑定this指向,然后作为一个新函数返回;

var person= {
     yourname:"张三",
     age:14,
     greet: "Hello!",
     greetUser: function(userName) {
     console.log(this.greet + " " + userName);
     }
};
var greetHola = person.greetUser.bind({greet: "Hola"});
var greetBonjour = person.greetUser.bind({greet: "Bonjour"},'Rahul');
greetHola("Rahul") // 输出"Hola Rahul"
greetBonjour() // 输出"Bonjour Rahul"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值