见Mozilla's Guide中的第25行。它说使用等同于
的代码是错误的SubType.prototype = new SuperType();
我有点认为,如果需要参数,你不能在没有任何参数的情况下调用new SuperType()
......但实际上并不是因为JavaScript中没有函数签名。不应该在没有任何参数的情况下调用new SuperType()
只会导致参数为undefined
?我想这可能会导致错误。
更重要的是,该指南说明使用SubType.prototype = new SuperType();
的原因还有其他原因。它们是什么?
答案 0 :(得分:1)
大多数情况下,构造函数不会像分配传递的值那样简单。有时构造函数会对传递的数据执行一些操作,以使新对象处于理想状态。在这种情况下,对undefined的定义会非常糟糕。
我会说这是一个不好的做法,因为这会使对象处于无效状态开始。当你的超级类型处于无效状态时,所有子类型也将无效。
当您想在对象之间建立关系时,使用Object.Create始终是一个好习惯
答案 1 :(得分:0)
参见此处的工作
function name(h,b) { this.h = h; this.b = b; }
function shape(x,y) { this.x = x; this.y = y; }
name.prototype = new shape(1,2);
name.prototype.x // prints 1
答案 2 :(得分:0)
prototype是Object的一个属性 - 基础对象,每个JS对象都继承自Object。
Object.prototype用于包含继承的所有方法和属性。但是JS中的Inherited并不像其他语言一样继承,在JS中我们应该理解它是Inherited = Shared
。在Inherited树中,它们(对象)在框中共享属性和方法是.prototype
。
然后你不应该使用SubType.prototype = new SuperType()
。此语句将覆盖Object()的基础.prototype
,创建新框,其中包含另一个已分配的内存,而不与其他对象共享。这个问题会导致严重的性能,在JS中继承(共享)是非法的。