javascript对象继承-子类和超类

克拉克

这两种方法有什么区别?

第一种方法

// Shape - superclass
function Shape() {
    this.x = 0;
    this.y = 0;
}

// superclass method
Shape.prototype.move = function(x, y) {
    this.x += x;
    this.y += y;
};

// Rectangle - subclass
function Rectangle() {
    Shape.call(this);
}

// subclass extends superclass
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;

var rect = new Rectangle();

第二种方法

// Shape - superclass
function Shape() {
    this.x = 0;
    this.y = 0;
}

// superclass method
Shape.prototype.move = function(x, y) {
    this.x += x;
    this.y += y;
};

// Rectangle - subclass
function Rectangle() {
    Shape.call(this);
}

// subclass extends superclass
Rectangle.prototype = new Shape();

var rect = new Rectangle();
最傻的

我看到两个区别:一个很大,一个很小。

小差异在于,在第二种方法中,Rectangle原型的constructor属性设置不正确它指向Shape,而不是指向Rectangle这是JavaScript OO方法中一个非常普遍的错误,大多数时候您都可以避免使用它,因为人们没有太多使用该constructor属性,但是它就在那里。

最大的不同是Shape()在第二个构造函数中的附加调用在您的特定示例中,事情或多或少都可以:Rectangle.prototype拥有一些您可能不希望拥有的额外属性(xy,两者都为零),但是这些Rectangle实例将被实例中的相应属性所遮盖反正。同样,这是一种非常常见但很小的错误,经常起作用,足以使您摆脱它。

第二种方法的问题在于,它仅在超类构造函数不需要任何参数时才起作用您的示例恰好适合该描述,因为它所做的只是将某些属性初始化为默认值。但是,在某些用例中,这种设置并不十分合适,在这种情况下不能使用第二种方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java类继承和比较子类对象

来自分类Dev

继承:子类中超类的隐藏变量

来自分类Dev

Javascript OOP类对象继承

来自分类Dev

Java继承混乱,具有相同名称的超类和子类成员变量

来自分类Dev

对属于超类的子类的对象的超类列表进行排序

来自分类Dev

创建包含超类和子类对象的对象数组的正确方法

来自分类Dev

创建持有超类和子类对象的对象数组的正确方法

来自分类Dev

将超类的对象转换为子类

来自分类Dev

如何找到超类对象的子类?(Java)

来自分类Dev

将超类的对象转换为子类

来自分类Dev

超类类型对象的子类的构造方法?

来自分类Dev

绘制uml类图,并在第三类中调用超类对象和子类对象

来自分类Dev

为什么动态方法分派和超类变量可以引用子类对象?

来自分类Dev

子类化Python类以继承超类的属性

来自分类Dev

子类化Python类以继承超类的属性

来自分类Dev

子类是否也会从其父类的超类继承?

来自分类Dev

超类和子类

来自分类Dev

子类和超类

来自分类Dev

如何让超类的继承属性出现在子类的对象中?

来自分类Dev

面向对象的jQuery / JavaScript类继承

来自分类Dev

面向对象的jQuery / JavaScript类继承

来自分类Dev

在 Javascript 中扩展(继承)类(或对象)

来自分类Dev

Java继承;将子类传递给超类的抽象方法

来自分类Dev

从子类到超类的升序HQL继承层次结构

来自分类Dev

如何从重写的子类方法调用超类的继承方法?

来自分类Dev

JavaScript继承,即使定义了子类中的超类标识符,也未定义

来自分类Dev

对子类对象的超类引用显示与对子类对象的子类引用相同的行为

来自分类Dev

为什么在OO编程中用于强制转换对象的实例在变量中实例化超类和子类?

来自分类Dev

如何将子类对象转换为超类对象

Related 相关文章

  1. 1

    Java类继承和比较子类对象

  2. 2

    继承:子类中超类的隐藏变量

  3. 3

    Javascript OOP类对象继承

  4. 4

    Java继承混乱,具有相同名称的超类和子类成员变量

  5. 5

    对属于超类的子类的对象的超类列表进行排序

  6. 6

    创建包含超类和子类对象的对象数组的正确方法

  7. 7

    创建持有超类和子类对象的对象数组的正确方法

  8. 8

    将超类的对象转换为子类

  9. 9

    如何找到超类对象的子类?(Java)

  10. 10

    将超类的对象转换为子类

  11. 11

    超类类型对象的子类的构造方法?

  12. 12

    绘制uml类图,并在第三类中调用超类对象和子类对象

  13. 13

    为什么动态方法分派和超类变量可以引用子类对象?

  14. 14

    子类化Python类以继承超类的属性

  15. 15

    子类化Python类以继承超类的属性

  16. 16

    子类是否也会从其父类的超类继承?

  17. 17

    超类和子类

  18. 18

    子类和超类

  19. 19

    如何让超类的继承属性出现在子类的对象中?

  20. 20

    面向对象的jQuery / JavaScript类继承

  21. 21

    面向对象的jQuery / JavaScript类继承

  22. 22

    在 Javascript 中扩展(继承)类(或对象)

  23. 23

    Java继承;将子类传递给超类的抽象方法

  24. 24

    从子类到超类的升序HQL继承层次结构

  25. 25

    如何从重写的子类方法调用超类的继承方法?

  26. 26

    JavaScript继承,即使定义了子类中的超类标识符,也未定义

  27. 27

    对子类对象的超类引用显示与对子类对象的子类引用相同的行为

  28. 28

    为什么在OO编程中用于强制转换对象的实例在变量中实例化超类和子类?

  29. 29

    如何将子类对象转换为超类对象

热门标签

归档