js对call的理解

首先call只能被方法引用,一个方法.call(内容),网上一搜都往继承上靠,对于初学者来说太复杂了,只要记住以下三点所有有关call的函数都可以看懂

  1. 只有函数才能调用call
  2. 执行调用call的函数 并把这个函数里的this指向call后面内容的所属对象
  3. 理解后面的所属对象分以下四点

  不传,或者传null,undefined, 函数中的this指向window对象

 传递另一个函数的函数名,函数中的this指向这个函数的引用

 传递字符串、数值或布尔类型等基础类型,函数中的this指向其对应的包装对象,如 String、Number、Boolean

 传递一个对象,函数中的this指向这个对象(大多都是用这个)

好像总结还是有点多,那就把没有的去掉只留最关键的两点

  1. 执行调用call的函数
  2. 把函数里的this用call后面的替换

进一步理解这两条需要借助一个例子来

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;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值