美文网首页
call/apply总结

call/apply总结

作者: Ertsul | 来源:发表于2018-03-01 15:26 被阅读25次

参数

  • obj1.call(obj2, param1, param2, ...)
  • obj1.apply(obj2, [ param1, param2, ...] )
    这两个函数的作用基本相同,主要是: obj2借用/代替obj1, 并且可以调用用obj1的方法; 不同之处是call的参数是排列的, 而apply的参数是一个数组; 需要注意的是被借用的函数/对象放在前面(obj1), 而借用函数/对象则是放在参数列表的第一个(obj2),可以总结为他人为上(哈, 就是你要借用别人的东西, 就要把别人放在第一位)

用法

函数

function dog(){
    console.log("wang");
}
function cat() {
    console.log("miao");
}
dog()   // "wang"
cat()   // "miao"
// call
dog.call(cat)  // cat调用dog的方法  "wang"
// apply
cat.apply(dog) // dog调用cat的方法  "miao"

对象

function Dog() {}
Dog.prototype = {
    say: function (a, b) {
        console.log((a + b) + " , wang");
    }
}

function Cat() {}
Cat.prototype = {
    say: function (a, b) {
        console.log((a + b) + " , miao");
    }
}
var d1 = new Dog()
d1.say(1, 2) // "3, wang" 
var c1 = new Cat()
c1.say(3, 4) // "7, miao"
// call
d1.say.call(c1, 5, 6) // c1借用d1的say方法 "11, wang"
c1.say.call(d1, 7, 8) // d1借用c1的say方法 "15, miao"
// apply
d1.say.apply(c1, [10, 11]) // c1借用d1的say方法 "21, wang" 
c1.say.apply(d1, [12, 13]) // d1借用c1的say方法 "25, miao"

借用知乎上的记忆口诀:

猫吃鱼,狗吃肉,奥特曼打小怪兽。
有天狗想吃鱼了
猫.吃鱼.call(狗,鱼)
狗就吃到鱼了
猫成精了,想打怪兽
奥特曼.打小怪兽.call(猫,小怪兽)

相关文章

网友评论

      本文标题:call/apply总结

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