【问题标题】:Is it possible in javascript to separate interface and implementation in class在javascript中是否可以在类中分离接口和实现
【发布时间】:2019-04-10 20:57:23
【问题描述】:

在 javascript 中,如果我不使用类,我可以这样做:

const Module = (function(){
    const myArray = [];
    const myObject = {};
    return {    //this is my interfaces
        myArray,
        myObject,

        myMethod1,
        myMethod2,
        myMethod3,
        myMethod4,

        myMethod99,
    }

    function myMethod1(){}

    function myMethod2(){}

    function myMethod3(){}

    function myMethod4(){}

    function myMethod99(){} 

})

这为我提供了某种结构,让我可以在顶部列出所有公开可用的属性和方法,这样更容易在模块之间导航并查看模块中有哪些可用的东西,也更容易导航到使用 Visual Studio Code 等 IDE 中的 Intellisense 功能时,只需转到模块,单击您要转到的方法,然后按 F12,它将带您到该功能。

现在与 javascript 中的类不同:

class Module{

    constructor(){}

    myMethod1(){}   
    myMethod2(){}   
    myMethod3(){}   
    myMethod4(){}

    myMethod99(){}

}

在这种情况下,我无法将接口和实现分开,从而难以在代码中导航。 Javascript有没有可能处理这种情况?

【问题讨论】:

  • 任何体面的 IDE 都足够智能,可以跳转到类中的方法定义,甚至可能列出所有类及其方法供您快速访问。这不是关于 Javascript 的问题,而是关于 IDE 的问题。
  • 我拒绝了这不是关于 javascript 的问题的说法。智能 IDE 确实可以做到这一点,但在我的环境中,我们无法强制人们使用什么,因为他们有自己的偏好。有些人甚至仍然使用 sublime,在某些情况下,当有人需要检查代码而无法直接从 git 访问 pc 时,我们需要有一种结构化代码的方法,以便我们可以获得尽可能多的信息,即使使用相当于记事本
  • 请仔细阅读这个问题,这里的重点是问我是否可以将所有重要的属性和接口放在代码之上,这样即使没有IDE,我们也可以看到这个文件中存在的内容
  • 我想你已经证明你可以......!?
  • 如果我们不使用class,答案是肯定的,但是我们在使用react和react native的时候出现了一个新问题,而如果我们不使用class,我们可以这样做,现在我们面临着 react 和 react native,它在任何地方都使用类,我们不确定我们是否可以对类做同样的事情,或者任何让它尽可能相似的方法。我不会直接为反应主题提出这个问题,因为这将是一般的 javascript 类行为

标签: javascript oop


【解决方案1】:

JavaScript 中还没有私有成员。存在 a proposal 包含此功能,虽然处于第 3 阶段,但尚未落地。

JavaScript 中也没有接口(因为几乎没有类型系统),将来不太可能添加。

考虑使用 TypeScript,它具有这两个功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多