Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS原型,小混乱_Javascript_Oop - Fatal编程技术网

Javascript JS原型,小混乱

Javascript JS原型,小混乱,javascript,oop,Javascript,Oop,我是javascript新手 我正在写一个面向对象的程序来寻找矩形和正方形的面积。我有三门课——形状、正方形和长方形。我想继承父类-Shape,进入子类-Square,我遇到了与原型相关的问题。代码: Square.prototype= new Shape(); Square.prototype.__proto__= Shape.prototype; 我想知道: 1.是否写入Square.prototype=newshape()在将类形状继承到类正方形方面就足够了吗? 2.这行有什么区别: S

我是javascript新手

我正在写一个面向对象的程序来寻找矩形和正方形的面积。我有三门课——形状、正方形和长方形。我想继承父类-Shape,进入子类-Square,我遇到了与原型相关的问题。代码:

Square.prototype= new Shape();
Square.prototype.__proto__= Shape.prototype;
我想知道:
1.是否写入
Square.prototype=newshape()在将类形状继承到类正方形方面就足够了吗?
2.这行有什么区别:
Square.prototype.\uuuu proto\uuuu=Shape.prototype
让我们去班级广场


非常感谢您的帮助,谢谢

对于您的继承,我宁愿使用:

Square.prototype = Object.create(Shape.prototype);
Square.prototype.constructor = Shape;
出于这些原因:


Square.prototype.\uuuu proto\uuuu=Shape.prototype不是一个好的实践,因为它将用另一个原型替换对象的所有原型链。这个操作非常慢。此外,属性
\uuuu proto\uuuu
已被弃用,并可能随时消失:

请参见1)是。2) 什么都没有(因为
Square.prototype.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。然而,构造一个形状实例来定义正方形的类似乎是不纯洁的;如何将参数传递给形状创建?简言之,这感觉像是另一个郎,而不是一个JS@dandavis:您是对的,该程序实际上是一个nodejs程序,这会改变一切吗?顺便说一句,我打算典型地向类Square添加属性。Felix和Oriol,非常感谢您的评论!fwiw,我发现将方法放在一个对象实例上更容易,然后可以影响我的任何其他实例;为什么每个对象都需要自己的方法呢?对于像smalltalk这样的东西来说,这是有意义的,但是对于像JS这样带有call/bind/apply/defineProperty的脚本语言来说就没有那么多了。如果数据对象只包含“自己的属性”,那么它还可以简化序列化和扩展,并且您不需要担心继承或重新创建继承以保持状态。因为您不继承数据,所以它使一切变得干净,V8使用ObjectObject的速度比自定义类型快。