我一直在实例化javascript中的子类,使用
object = new class ()
但我注意到有人实例化使用
object.prototype = new class ()
问题:有什么区别?在我看来,后者似乎更尊重继承链,因为如果
class ()
包含一堆“this.variable = x
”语句,并且object是您要从其继承的对象而不是类的实例,则可以将这些变量准确地分配给object的原型(prototype),而不是像前一种情况那样针对对象本身。所以实际上是这样吗?object = new class () |vs.| subclass.prototype = new superclass ()
但是,程序中的功能都相同吗?
附带的问题:另外,我对
new
运算符的实际作用还不清楚。在我看来,要做的只是创建一个空对象并为其分配proto属性?
最佳答案
区别在于,当您执行以下操作时:
var subclass = new superclass();
您正在创建
superclass
的实例。 subclass
只是可变的。您没有在创建子类(即,使subclass
继承superclass
)。在后一个示例中,假设子类是一个函数,则是说子类的所有新实例都应继承(即子类)
superclass
。所以:
function superclass() {this.stuff="stuff";}
function subclass() {}
subclass.prototype = new superclass();
alert(new subclass().this); // pops up "stuff"
是原型(prototype)继承。
至于
new
运算符,它用于创建内置对象和用户定义类型的实例。用户定义的类型只是一个函数。编辑:
当我在上面写该子类使用原型(prototype)继承继承父类(super class)型时,我的意思是子类的所有新实例都从的一个实例(特别是supertclass的实例)继承,而不是从
superclass
类型/函数本身继承。
关于javascript - subclass.prototype = new superclass()与subclass = new superclass(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117614/