我正在与同事讨论Javascript OO策略/模式,从我读过的大多数教程中,在两个构造函数(带参数)之间建立原型/继承关系的常用方法是将原型分配给孩子的功能。
e.g:
var MyParentClass = function(arg1) { ... };
var MyChildClass = function(arg1, arg2) {
MyParentClass.apply(this, arguments);
...
};
MyChildClass.prototype = new MyParentClass;
这里的一个问题是参数可能是不同的顺序,或者更改名称等,上面的例子确实需要两(2)个单独的语句来建立关系(apply()语句,并且.prototype statemetn)。
我的同事提出了这种方法:
var MyParentClass = function(arg1) { ... };
var MyChildClass = function(arg1, arg2) {
this.__proto__ = new MyParentClass(arg2);
...
};
这种方法更短,并且可以更灵活地将参数传递给parent constructor
。
除非我遗漏了某些东西,否则这似乎应该是在JavaScript类之间建立继承的事实模式,所以我很好奇为什么我从来没有遇到过这种模式到目前为止所有的JavaScript OO教程。如果上述策略有任何不利因素,有人可以告诉我吗?
答案 0 :(得分:3)
您可以通过以下方式将参数传递给parent-constructor-函数来解决问题:
而不是
MyChildClass.prototype = new MyParentClass;
你可以写
MyChildClass.prototype = Object.create(MyParentClass.protoype)
以这种方式,您可以在没有MyParentClass的新实例化
的情况下分配原型如果你想将构造函数中的参数从MyChildClass传递给MyParentClass,你可以这样做:
function MyChildClass(arg1) {
MyParentClass.call(this, arg1);
}