【发布时间】:2014-11-25 22:36:01
【问题描述】:
我是 JavaScript 新手。
我正在编写一个面向对象的程序来查找矩形和正方形的面积。我有三个类——形状、正方形和矩形。我想继承父类-Shape,到子类-Square,遇到了原型相关的问题。代码:
Square.prototype= new Shape();
Square.prototype.__proto__= Shape.prototype;
我想知道:
1. 写Square.prototype= new Shape(); 是否可以将Shape 类继承到Square 类中?
2.线路有什么区别:Square.prototype.__proto__= Shape.prototype;
导致类 Square。
非常感谢任何帮助,谢谢!
【问题讨论】:
-
1) 是的。 2) 什么都没有(因为
Square.prototype.__proto__已经指向Shape.prototype)。但是there are better ways to establish inheritance. -
构造一个Shape的实例来为Square定义一个类似乎不纯;你应该如何将参数传递给 Shape 创建?简而言之,感觉比 JS 更像另一种 lang
-
@dandavis:你是对的,这个程序实际上是一个 nodejs 程序,这会改变一切吗?顺便说一句,我打算在原型上为类 Square 添加属性。 Felix 和 Oriol,非常感谢你们的 cmets!
-
fwiw,我发现将方法放在单个对象实例上更容易,然后可以影响我的任何其他实例;为什么每个对象都需要它自己的方法呢?对于诸如 smalltalk 之类的东西是有道理的,但对于像 JS 这样带有 call/bind/apply/defineProperty 的脚本语言则没有那么多。如果数据对象仅包含“自己的属性”,它还可以使序列化和扩展更容易,并且您无需担心继承或重新创建继承以保持状态。因为你不继承数据,它使一切变得干净,而且 V8 使用 objectObjects 比自定义类型更快。
标签: javascript oop