我一直在使用
javascript实例化子类
object = new class ()
但我注意到有些人实例化使用
object.prototype = new class ()
问题:有什么区别?对我来说,似乎后者更多地尊重继承链,因为如果class()有一堆“this.variable = x”语句,而对象是你想从它继承的东西而不是类的实例,那么你是准确地将这些变量分配给对象的原型而不是像前一种情况那样分配给对象本身.所以实际上它是这样的?
object = new class () |vs.| subclass.prototype = new superclass ()
但是,在程序功能上两者都是一样的吗?
旁边的问题:我还有点不清楚新操作符实际上做了什么.在我看来,只需创建一个空对象并分配它的proto属性?
解决方法
不同的是,当你这样做时:
var subclass = new superclass();
您正在创建超类的实例.子类只是变量.您没有创建子类(即,使子类继承超类).
在后一个例子中,假设子类是一个函数,你说的是子类的所有新实例都应该继承(即.子类)超类.
所以:
function superclass() {this.stuff="stuff";} function subclass() {} subclass.prototype = new superclass(); alert(new subclass().this); // pops up "stuff"
是典型的继承.
对于new运算符,它用于创建内置对象和用户定义类型的实例.用户定义的类型只是一个函数.
编辑:当我在上面写道,子类继承了使用原型继承的超类型时,我的意思是所有子类的新实例都从超类的一个特定实例继承,而不是从超类类型/函数本身继承.