Javascript继承调用和应用

时间:2017-06-28 23:58:04

标签: javascript call apply prototypal-inheritance

我一直试图让它工作一段时间,并一直给我未定义。



function A(first, last){
  this.first = first;
  this.last = last;
}

A.prototype.concat = function(){
  return this.last + this.first;
}

function B(first, last){
  A.call(this, first, last);
  this.type = 'Long';
}

B.prototype.concat = function(){
  A.prototype.concat.apply(this, arguments);
}

var a = new B('A', 'B');
console.log(a.concat());




有人可以帮我弄清楚我错过了什么吗?如果我在A上的concat方法接受一个参数,那么它可以工作,但不是没有它。

1 个答案:

答案 0 :(得分:2)

你需要做

B.prototype.concat = function() {
  return A.prototype.concat.apply(this, arguments);
//^^^^^^
};

但当然,整个继承点是当你不想拦截任何东西时你不需要包装器函数,但是能够直接调用继承的方法: / p>

B.prototype.concat = A.prototype.concat;

或更好,让类动态地从A原型继承所有方法:

B.prototype = Object.create(A.prototype);