先引见一下call()的用法,apply()的用法与之大抵雷同,只不过参数列表略有不同
call()在我看来重要的功用就是在不修改对象的情况下对对象的属性举行 重写,使之继续一个新对象的属性
Symtax: fun.call(thisArg[, arg1[, arg2[, ...]]])
先举个简朴的例子:
function vehicle(color, speed) {
this.color = color;
this.speed = speed;
}
function car(color,speed,price) {
vehicle.call(this,arguments);
this.price = price;
}
var mycar = new car("red", 100, 2000);
alert("汽车色彩是" + mycar.color + ", 速率是 " +
mycar.speed + ", 价钱是" + mycar.price);
//汽车色彩是red,速率是100,价钱是2000
经由过程例子能够看出能够call要领增添对象的属性信息,
也能够经由过程运用call要领掩盖原对象的属性
在举个简朴的和作用域连系的例子
var x = 1;
function method() {
alert(this.x);
}
var c = {};
c.x = 0;
c.m = method;
c.m.apply(); //1,此时挪用的是全局对象
c.m.apply(c); //0,此时挪用的是对象c