对apply和call的理解

  apply和call都是可以改变this上下文的方法,从而可以达到实现继承的目的。两者的功能完全一样,只是传入的参数略有不同。

apply: apply(this,[arg1,arg2,arg3...])

call: call(this,arg1,arg2,arg3....)

但是声明一下,这里所谓的继承,是继承类的构造函数内的属性和方法,外部对类添加的属性和方法,使用apply和call是不会继承上的。来看一个demo:

 1 function Animal(name,age){
 2     this.name=name;
 3     this.age = age;
 4     this.getName = function(){
 5         return this.name;
 6     }
 7     this.setName = function(name){
 8         this.name = name
 9     }
10 }
11 Animal.getAge = function(){
12     return this.age;
13 }
14 
15 function Dog(){
16     Animal.apply(this,arguments);//Dog类继承了Animal类,这时Dog的实例就拥有了Animal构造器内部的属性和方法
17 }
18 var dd = new Dog('maomao',10)
19 alert(dd.getName());//继承了父类的方法 输出:maomao
20 alert(dd.getAge());//继承不了除构造方法以外的属性和方法 此处报错
原文地址:https://www.cnblogs.com/freefish12/p/5561368.html