【发布时间】:2016-04-11 03:59:46
【问题描述】:
我不明白我们应该使用哪些继承变体。我什至不知道他们之间是否有区别。
我有一个简单的 JavaScript 继承示例:
function MyObject(a){
this.a = a;
}
function MyObjectChild(a, b){
MyObject.call(this, a);
this.b = b;
}
MyObjectChild.prototype = Object.create(MyObject.prototype);
var myObj = new MyObjectChild(1, 2);
console.log(myObj.a + " " + myObj.b);
结果将是“1 2”。
但是这一行:
MyObjectChild.prototype = Object.create(MyObject.prototype);
我们可以用 10 种不同的方式写作:
MyObjectChild.prototype = new MyObject();
MyObjectChild.prototype = MyObject.prototype;
MyObjectChild.prototype = MyObject.prototype.prototype;
MyObjectChild.prototype = Object.create(MyObject);
MyObjectChild.prototype = Object.create(MyObject.prototype);
MyObjectChild.prototype.prototype = new MyObject();
MyObjectChild.prototype.prototype = MyObject.prototype;
MyObjectChild.prototype.prototype = MyObject.prototype.prototype;
MyObjectChild.prototype.prototype = Object.create(MyObject);
MyObjectChild.prototype.prototype = Object.create(MyObject.prototype);
所有这些都会起作用!有人能解释一下我们应该使用哪些变体,不应该使用哪些变体吗?
【问题讨论】:
-
我只是说不要介意 es5 类声明的麻烦。现在和将来我使用添加的 es6
class Name {}。如有必要,我编译为 es5 或简单地使用严格模式。新的类声明更标准化、更易于理解且更简洁。 -
"它们都可以工作!" - 不。事实上,您的任何替代方案都不起作用,它们都做不同的事情。
标签: javascript inheritance prototype prototypal-inheritance