我正在开发一个使用原型继承的 JavaScript 项目。我决定使用它的方式如下:
var MySuperClass = function (param) {
this.prop = param;
};
MySuperClass.prototype.myFunc = function () {
console.log(this.prop);
};
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = new MySuperClass();
MySubClass.prototype.constructor = MySubClass;
var obj = new MySubClass('value');
obj.myFunc();
强调继承。
问题在于,如果我在每个类(超类和子类)的构造函数中放置一个 console.log,超类会被调用两次,一次是在MySubClass.prototype = new MySuperClass();
没有任何参数的情况下传递给子类,一次是有参数当它在子类的构造函数中是“构造函数被盗”时。
如果我随后尝试保存这些参数,这可能会导致错误(这意味着我必须添加逻辑来处理空参数)。
现在,如果我这样做:
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = MySuperClass;
MySubClass.prototype.constructor = MySubClass;
一切似乎都正常,但我以前从未见过有人这样做(在我的谷歌搜索中)。
任何人都可以向我解释第二个是否以及如何不正确(它似乎类似于 Crockford 继承函数)以及如何修复第一个不触发两次,如果可以的话?