2
function Parent (arg1, arg2) {

    alert(arg1);

    this.member1 = arg1;
    this.member2 = arg2;
};

Parent.prototype.update = function () {

    // parent method update
};

function Child (arg1, arg2, arg3) {

    Parent.call(this, arg1, arg2);
    this.member3 = arg3;
};

Child.prototype = new Parent;

Child.prototype.update = function () {

    // overwritten method update
};

function init () {

    var childObject = new Child(false, false, false);
    childObject.update();
}

结果是两个警报

  1. 不明确的
  2. 错误的

为什么会出现两次警报?我已经搜索过了,但还没有找到任何东西 + 不知道要搜索什么。

结果应该是一个带有“假”的警报,还是我错了?

多谢!

4

2 回答 2

4

通过使用构造函数Parent来创建原型Child,构造函数被调用,这是你的第一个警报undefined

为了创建一个仍然使用相同原型链但在创建原型时不调用父构造函数的原型,您需要在其间添加另一个步骤。

Child.prototype = (function() {
  var Base = function() {};
  Base.prototype = Parent.prototype;
  return new Base();
}());

这将创建一个匿名函数(称为Base),其原型设置为Parent类的Child原型,然后将原型分配给将保留继承的新函数,但在创建原型链Base时不调用构造函数Parent.

于 2012-10-24T08:00:56.353 回答
0

当您创建 Parent 的新对象时有一个警报,当您创建Child.prototype = new Parent;child 的新对象时有一个警报,var childObject = new Child(false, false, false);

于 2012-10-24T07:58:25.253 回答