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();
}
结果是两个警告
为什么警报会发生两次?我已经搜索过,但还没有找到任何东西+不知道要搜索什么。
结果应该是一个警告“假”,或者我错了?
很多!
答案 0 :(得分:4)
通过使用Parent
的构造函数为Child
创建原型,正在调用构造函数,这是undefined
的第一个警报。
为了创建仍然使用相同原型链的原型,但在创建原型时不调用父构造函数,您需要在它们之间添加另一个步骤。
Child.prototype = (function() {
var Base = function() {};
Base.prototype = Parent.prototype;
return new Base();
}());
这将创建一个匿名函数(称为Base
),该函数将原型设置为Parent
类的原型,然后将Child
原型分配给新的Base
1}}将保留继承,但在创建原型链时不会调用Parent
的构造函数。
答案 1 :(得分:0)
当您创建父Child.prototype = new Parent;
的新对象时有一个警报,而当您创建子对象var childObject = new Child(false, false, false);