JavaScript继承、接口(interface)

标签 javascript inheritance prototype

我在 JavaScript 继承和原型(prototype)方面遇到一些问题。 我在 stackoverflow/google 中所做的所有研究都引导我使用我的类的原型(prototype),但这就是我想避免的一点。我知道 JavaScript 不是这样构思的,但我确信这是可能的,我只是陷入困境。

我有两个类(或者以后可能会更多)。一是基础,它将是一切之母,我希望它具有所有基本属性和方法(就像基本的 OO)。 我的对象用于几何。


    function EnvObject(){
      this.position = {x: 0, y: 0};
      this.velocity = {x: 0, y: 0};
      this.mass = 0; // kg
      this.restitution = 0; // Restitution
      this.A = 0;
      this.Cd = 0; // Drag force
    
      function init(_x, _y, _mass, _restitution)
      {
        blabla
      };
    };
    
    function oCircle()
    {
     function foo(){}
     function bar(){}
    }
    function oSquare()
    {
     function foo(){}
     function bar(){}
    }

主类提供我的类的所有信息,例如正方形或圆形...... 用原型(prototype)扩展它会导致大问题和一件伟大的事情,方法被很好地共享(这很酷),但是我的属性也是共享的,所以当我在 Square 类中更改它时,属性也会在 Circle 中更改(这是一个坏事)

我知道主要的解决方案是不提供属性接口(interface),并将它们仅放在 Square/Circle 类中,但它不是很干净(我的意思是我编写相同的属性两次或更多次)。

我的主要目标是创建一个包含 2 个或更多其他类的新类,而不让它们共享任何内容或可能只共享一些方法?最终编写干净的代码? :)

所以我尝试了很多脚本......它们都使用这种技术。或者也许我只是错了,这可能是真的。

我还知道 JS 中不存在类,它只是一个大函数。这样写对象是不是更好?我倾向于非常喜欢它,因为在我看来使用函数有点困惑。也许这样继承会容易得多?

var envObject = {
    position: {x, y}
}
var oCircle = {
    foo: function(){}
}

最佳答案

您可能已经得到 issues with the nested objects (位置速度)。您将需要分别为每个不同的实例创建子对象。

Also I know that class doesn't exist in JS, it's just a big function. Is it better to write object like this?

不,不是“更好”,只是不同。您可以只使用返回普通对象的函数,而不是使用使用 new 调用的构造函数并在 this 上设置属性,从而减少困惑。

Maybe inheritance is much easier in this way?

不是prototypical inheritance JavaScript 使用的。另外,您可能想看看 this answer关于“类”在 JavaScript 中如何工作。

关于JavaScript继承、接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14630215/

相关文章:

javascript - 在替换 ng-repeat 之前调用自定义指令链接函数

C++ 不同的子类需要不同的参数

java - 如何从其他类访问jFrame的组件?

c# - Cast 接口(interface)和类对象

javascript - 如何正确设计 JS 子伪类的原型(prototype)?

javascript - 弹出循环: Stop Duplication/Triplication/X When Adding Data

javascript - 如何修复 chrome 扩展程序中的 'Chrome Content Security Policy Directive'

Angular 中使用的 JavaScript 模式

javascript - 对 js proto 和分配新属性感到困惑

javascript - 退出页面时弹出 Javascript jQuery