js對call的理解

首先call只能被方法引用,一個方法.call(對象),簡單理解就做了兩件事,網上說的都太複雜了,如下圖

  1. 執行調用的方法
  2. 對象1裏面的this指向對象2

進一步理解這兩條需要藉助一個例子來

function  Animal() {
    this.name="animal";
    this.age="15";
    this.showName=function(){
      console.log(this.name);
    }
  }
function Dog(){
  this.name="dog";
  this.age = '20';
}
var animal = new Animal();
var dog=new Dog();
animal.showName.call(dog)   //打印dog
Animal.call(dog);
dog.showName()   //打印animal

先看  animal.showName.call(dog) 

  • 第一步執行animal.showName()這個函數,
  • 第二步是this指的是dog;

執行函數直接打印this.name, this指的是dog它有自己的name,就直接打印出"dog"字符串

再看Animal.call(dog);

執行 Animal()就是三個賦值語句,而裏面的this也指的是dog 這樣就給就成爲下面對象

  1. 第一步 執行Animal()這個函數
  2. 第二步this指的是dog 

執行 Animal()就是對this的一些賦值,而this指的是dog對象,因此執行完dog就變成

{
    name:"animal",
    age:"15",
    showName:function(){
      console.log(this.name);
    }
  }

執行dog.showName()打印出來就是‘animal’

網上有很多關於call的例子,都是可以用這兩步來進行理解,注意的是,後面的對象可能指的是window;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章