使用纯JavaScript做继承,我通常是这样的:
function A() {}
A.prototype.run = function () {};
function B() {}
B.prototype = new A;
B.prototype.constructor = B;
由于没有参数传递给构造函数,new A 没有什么可提示的。现在,如果构造函数有要传递的参数,我还没有想出一个很好的继承方法。例如,
function A(x, y) {}
A.prototype.run = function () {};
function B(x, y) {}
B.prototype = new A;
B.prototype.constructor = B;
我可以传递一些任意值,例如:
B.prototype = new A(null, null);
在某些情况下,我可能需要在 A 的构造函数中验证 x 和 y。在某些极端情况下,我需要在检查 x 或 y 时抛出错误。那么,B 就没有办法使用新的 A 从 A 继承。
有什么建议吗?
谢谢!
最佳答案
好吧,如果你想让 B.prototype
成为继承自 A.prototype
的对象,而不执行 A
构造函数,避免所有可能的副作用,你可以使用一个虚拟构造函数来做到这一点,例如:
function tmp() {}
tmp.prototype = A.prototype;
B.prototype = new tmp();
B.prototype.constructor = B;
您可以创建一个函数来封装创建这个新对象的逻辑,例如:
function inherit(o) {
function F() {}; // Dummy constructor
F.prototype = o;
return new F();
}
//...
B.prototype = inherit(A.prototype);
B.prototype.constructor = B;
如果您的目标是现代浏览器,您可以使用 ECMAScript 5 Object.create
方法来达到同样的目的,例如:
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
//..
关于JavaScript 继承 : when constructor has arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533473/