美文网首页
call/apply/bind的用法

call/apply/bind的用法

作者: 罗斯福 | 来源:发表于2019-12-12 23:55 被阅读0次

用法

call的语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
apply的语法:apply([thisObj[,argArray]])
bind的语法:
MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为 this,传入 bind() 方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数;这也是apply、call、bind的不同之处。bind方法是创建一个函数,然后可以在需要调用的时候再执行函数,并非是立即执行函数;而call,apply是在改变了上下文中的this指向后并立即执行函数。

用途

通俗的讲就是改变this的指向

举例

1.普通调用

function add(a,b){
    return a+b;
}
add.call(add, 5, 3); //8
add.apply(add, [5, 3]); //8

var foo1 = add.bind(add, 5,3); 
foo1(); //8
var foo1 = add.bind(add, 5,3); 
foo1(); //8

2.数组的合并

var facebookImg = ["fb1.jpg","fb2.jpg","fb3.jpg"];
var youtubeImg = ["yt1.jpg","yt2.jpg","yt3.jpg"];
var allImg = [];
allImg.push.apply(allImg,facebookImg);
allImg.push.apply(allImg,youtubeImg);

3.继承

function superType(name){
  this.name = name;
}
function subType(name,age){
  this.age = age;
  superType.call(this,name);
}
var types1 = new subType("yqxcn", 30);
console.log("age:" + types1.age);        //age:30
console.log("name:" + types1.name);      //name:yqxcn,继承自superType属性值

var types2 = new subType("wx272252", 18);
console.log("age:" + types2.age);        //age:18
console.log("name:" + types2.name);      //name:wx272252,继承自superType属性值

相关文章

网友评论

      本文标题:call/apply/bind的用法

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