javascript - subclass.prototype = new superclass()与subclass = new superclass()

标签 javascript

我一直在实例化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/

相关文章:

javascript - 单击时更改文本未按预期工作

javascript - 当我在 requirejs 中时,如何调用全局加载的 api?

javascript - 从 javascript 调用服务器端方法时出错

javascript - 在 MVC Ajax..BeginForm 部分回发后运行 Javascript

javascript - 是否可以将 CSS 应用于字符的一半?

javascript - AngularJS select 似乎需要在同一个对象上匹配才能设置所选选项

javascript - 输入后加载到文本区域内

javascript - 在Highchart中,为什么饼图的钻取数据颜色不同?

javascript - 网页/网站页面中的 Android webview 使用本地 Assets 文件(帮助)

javascript - 有没有办法在没有用户身份验证的情况下保护 Firebase Cloud Functions 免受入侵者调用?