1.為什麼要用 call 、apply?
為了 改變方法裡面的屬性而不去改變原來的方法
function fruits() {}
fruits.prototype = {
color: "red",
say: function() {
console.log("My color is " + this.color);
}
}
var apple = new fruits;
apple.say(); //My color is red
banana = {
color: "yellow"
}
}
apple.say.call(banana); //My color is yellow
a
apple.say.apply(banana); //My color is yellow
2.call 與apply 區別
1)call 引數固定 apply 引數不固定 apply 引數是放在陣列裡面的
2)call 可以將偽陣列轉換為真正的陣列
例如一個例子:
function log(){
var args = Array.prototype.slice.call(arguments);
args.unshift(`(app)`);
console.log.apply(console, args);
};
log("hello world"); //(app)hello world
3) bind 是返回對應函式,便於稍後呼叫;apply 、call 則是立即呼叫 。
function show(sex){
console.log("普通函式"+sex);
}
var person={
name:"aa",
age:14
};
show.call(person,"男");
show.apply(person,["女"]);
//對於bind來說,用法更加的靈活
show.bind(person,"不明")(
);
// var ss=show.bind(person,"不明");
// ss();