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;

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