由js继承想到的

借用构造函数

创建一个名为Parents构造函数

function Parents(name){
  this.name = name;
  this.sayName = function(){
    console.log(this.name);
  }
}

创建一个名为Children的构造函数,用来继承Parents的属性

function Children(name){
  Parents.call(this, name);   // allen
}

创建实例对象,并调用sayName方法

var child = new Children('allen');
child.sayName();

这里我们修改一下Children,看看会输出什么

function Children(name){
  // Parents.call(this, name);  //allen
  // Parents.call(this, arguments);  //{ '0': 'allen' }
  // Parents.call(this, Array.prototype.slice.call(arguments));  //[ 'allen' ]
  // Parents.apply(this, name);  //报错
  // Parents.apply(this, [name])  //allen
  // Parents.apply(this, arguments)  //allen
  Parents.apply(this, Array.prototype.slice.call(arguments));  //allen
}

参照apply和call方法的区别,上面的结果就显而易见了。
如果我们把Children的参数修改为rest参数,结果就会有新的不同

写累了,未完待续。。。

你可能感兴趣的:(由js继承想到的)