call/apply总结

2018-03-01  本文已影响25人  Ertsul

参数

用法

函数

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(猫,小怪兽)

上一篇 下一篇

猜你喜欢

热点阅读