美文网首页
call, apply, bind

call, apply, bind

作者: 一刀一个小黄鱼 | 来源:发表于2018-03-27 12:08 被阅读13次

call, apply, bind区别

call
var obj = {name:'iceman'};
function fn() {
    console.log(this);
    console.log(this.name);
}
fn(); // this --> window
// obj.fn(); // Uncaught TypeError: obj.fn is not a function
fn.call(obj); // this --> obj

首先寻找call方法,最后通过原型链在Function的原型中找到call方法,然后让call方法执行,在执行call方法的时候,让fn方法中的this变为第一个参数值obj,最后再把fn这个函数执行。

apply
var obj = {name:'iceman'};

function fn(num1, num2) {
    console.log(num1 + num2);
    console.log(this);
}
fn.call(obj , 100 , 200); // 300, this --> obj
fn.apply(obj , [100, 200]); // 300, this --> obj

call在给fn传递参数的时候,是一个个的传递值的,而apply不是一个个传的,而是把要给fn传递的参数值同一个的放在一个数组中进行操作,也相当于一个个的给fn的形参赋值。

bind
var obj = {name:'iceman'};

function fn(num1, num2) {
    console.log(num1 + num2);
    console.log(this);
}

let b = fn.bind(obj, 100, 200); //不执行,this指向已经改变,有一个改变后的返回值
b(); //300, this --> obj

相关文章

网友评论

      本文标题:call, apply, bind

      本文链接:https://www.haomeiwen.com/subject/iowkzxtx.html