先介紹一下call()的用法,apply()的用法與之大體相同,只不過參數列表略有不一樣app
call()在我看來主要的功能就是在不修改對象的狀況下對對象的屬性進行 重寫,使之繼承一個新對象的屬性this
Symtax: fun.call(thisArg[, arg1[, arg2[, ...]]])
先舉個簡單的例子:code
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