【问题标题】:JavaScript prototype inheritance and constructorsJavaScript 原型继承和构造函数
【发布时间】:2012-01-06 12:41:17
【问题描述】:
考虑闲置的例子:
function A(obj) {
}
B.prototype = new A;
B.prototype.constructor = B;
function B(obj) {
A.call(this, obj);
}
B 应该从 A 继承原型。这段代码是否正确?为什么在解析脚本时调用函数 A 一次,而没有声明 A 或 B 的任何实例?是因为闲置线吗?
B.prototype = new A;
如果是这样,如果不调用定义中的函数A,B如何继承A。
【问题讨论】:
标签:
javascript
inheritance
prototype
【解决方案1】:
如果你使用 Object.create,你可以避免再次调用 A
B.prototype = Object.create(A.prototype)
Object.create 创建一个以给定参数作为原型的新对象(实际原型,而不是“原型”属性)。它不存在于旧浏览器(IE A 版本(因此可以调用而不会产生不希望的副作用)
if(!Object.create){
Object.create = function(proto){
var F = function(){};
F.prototype = proto;
return new F(); //BTW, always use parenthesis when calling new. It looks better.
}
}
您可以做的另一件事是永远不要将逻辑放在构造函数中,而是将其放在单独的init 方法中,然后必须调用该方法。