JavaScript继承:在构造函数中使用__proto__,而不是构造函数的prototype属性

时间:2014-07-09 08:07:08

标签: javascript oop inheritance prototype

我正在与同事讨论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教程。如果上述策略有任何不利因素,有人可以告诉我吗?

1 个答案:

答案 0 :(得分:3)

您可以通过以下方式将参数传递给parent-constructor-函数来解决问题:

而不是

MyChildClass.prototype = new MyParentClass;

你可以写

MyChildClass.prototype = Object.create(MyParentClass.protoype)

以这种方式,您可以在没有MyParentClass的新实例化

的情况下分配原型

如果你想将构造函数中的参数从MyChildClass传递给MyParentClass,你可以这样做:

function MyChildClass(arg1) {
    MyParentClass.call(this, arg1);
}