JavaScript面向?qū)ο螅ㄋ模?/h1>

call 方法的使用

官方文檔是這么說的:調(diào)用一個對象的一個方法,以另一個對象替換當(dāng)前對象。
call 方法可以用來代替另一個對象調(diào)用一個方法。call 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象。
如果沒有提供 thisObj 參數(shù),那么 Global 對象被用作 thisObj。
官方文檔寫的太復(fù)雜,通過實(shí)例來測試。

function Person(name) {
  this.name = name;
  this.show = function () {
    console.log(this.name);
  }
}

function Man() {
  this.name = "Lucy";
}

var person = new Person("Jack");
var man = new Man();

person.show.call(man); // "Lucy"

此處輸出的是 "Lucy",call 的意思是:將 Person 對象的 show 方法,放到 Man 對象中去執(zhí)行,也就是說:在 Man 對象中去執(zhí)行 Person 對象的 show 方法。
此時 show 方法被放置到 Man 對象中執(zhí)行,方法中的 console.log(this.name); 就已經(jīng)指向的是 "Lucy"

apply 方法的使用

applycall 方法的功能一致,不一樣的地方在于參數(shù)列表。applycall 接收的第一個參數(shù)一樣,都是對象,而第二個參數(shù) apply 接收的是一個數(shù)組、call 接收的是一個參數(shù)列表。

  • Function.apply(object, args)
  • Function.call(object,args ...)

通過 call 或 apply 實(shí)現(xiàn)繼承

function Person(name) {
  this.name = name;
}

function Man(name, age) {
  Person.call(this, name);
  this.age = age;
}

var man = new Man("Lucy", 18);

console.log(man); // Man{name: "Lucy", age: 18}

多重繼承

function Person(name) {
  this.name = name;
}
function Student(sex) {
  this.sex = sex;
}

function Man(name, sex, age) {
  Person.call(this, name);
  Student.call(this, sex);
  this.age = age;
}

var man = new Man("Lucy", 'M', 18); // Man{name: "Lucy", sex: 'M', age: 18}

console.log(man);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容