JS 中的 call( ) 方法

284 阅读1分钟

call( ) 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数

语法:function.call(thisArg, arg1, arg2, ...)

call( ) 允许为不同的对象分配和调用属于一个对象的函数/方法。 

 call( ) 提供新的 this 值给当前调用的函数/方法。你可以使用 call 来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法)

比如:

  function Car(){
    this.name = 'car1';
  }

  Car.prototype.getName = function () {
    return this.name;
  }

  function Suv(){
    Car.call(this);
    this.type = 'suv01'
  }

  let myCar = new Suv();

举一个汽车的例子,先给汽车定义一个构造函数 Car(),返回汽车的名称。再给他的原型添加一个 getName 方法

接着给一个 Suv 汽车类型也定一个构造函数,这个构造函数继承 Car(),同时也有属于自己的方法,返回自己的类型。

其中 Car.call(this) 就是借助 call( ) 来做继承,首先 Car 调用 call( ) 方法,this 指向了调用他的对象也就是函数 Suv( ),这样 Car( ) 函数里边的属性和方法都继承给了 Suv( ) 函数。因为有了 call ,Car 的属性和方法就指向了 Suv(这个 this 的外层也就是 Suv)

但是同时也有一个弊端,那就是 getName 方法 Suv( ) 是无法获得的,因为只能继承父类的实例属性和方法,不能继承父类原型属性或者方法