關於call()和apply()的大體用法

先介紹一下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
相關文章
相關標籤/搜索