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 面向对象编程的正确方法_Javascript_Oop - Fatal编程技术网

Javascript 面向对象编程的正确方法

Javascript 面向对象编程的正确方法,javascript,oop,Javascript,Oop,我有点困惑 我发现javascript中有很多方法可以实现OOP 你能告诉我有什么不同吗?哪一个是正确的 class Dog{ bark(){} } var Dog = { bark : function(){} } var Dog = function(){ this.bark = function(){} } js中的是类,但仍然是为浏览器引入的,第二个是使对象像数组一样,最后一个是oop,从某种意义上说……如果你知道oop使用的是typescript,那么对我来说就是jav

我有点困惑 我发现javascript中有很多方法可以实现OOP 你能告诉我有什么不同吗?哪一个是正确的

class Dog{
 bark(){}
}

var Dog = {
  bark : function(){}
}

var Dog = function(){
  this.bark = function(){}
}

js中的是类,但仍然是为浏览器引入的,第二个是使对象像数组一样,最后一个是oop,从某种意义上说……如果你知道oop使用的是typescript,那么对我来说就是javascript oop

var Dog = function(){ this.bark = function(){} }

如果您知道您有ES6功能可用,我会选择第一个选项:

class Dog {
  bark() {
    // code here
  }
}
你提到的其他方法也有缺陷

  • 第二种方法创建对象实例,而不是类
  • 第三种方法是可以接受的,但在大多数情况下,最好将该方法附加到原型上
如果您不确定是否有ES6功能可用,请执行以下操作:

function Dog() {
  // init
}

Dog.prototype.bark = function() {
  // code here
};
编辑: 正如其他人指出的,您的问题在某种程度上是基于情境和/或观点的。也就是说,不同的情况可能需要不同的方法,不同的开发人员会根据他们的个人喜好给出不同的答案。然而,我上面给出的答案是一般JS社区已经同意的,所以我建议您在大多数情况下使用它们

  • 第一个在ES6中介绍。这有助于来自其他编程语言(如Java)的程序员轻松编写Javascript
  • 第二次使用javascript对象文字创建对象
  • 最后一个是名为构造函数的函数。您可以使用构造函数创建如下javascript对象

    var object=newdog()

  • 还有另一种使用对象构造函数创建javascript对象的方法,如下所示

    var object = new Object();
    
    以上所有方法都是创建对象文字的正确方法。下面是使用对象文字的一些好处

  • 它比打字短
  • 它强调对象只是可变散列,而不是需要从“配方”(来自类)烘焙的东西

  • 哪一个是正确的
    正确的目的是什么?这个问题太宽泛了——你想实现什么?我想这就像问GNUCCC的哪个版本是最好的。当然,最新的稳定版本。所以
    class Dog
    它是第一个(
    class Dog
    )是ES6。因此,如果您在支持ES6的环境中运行代码,那么无论如何都应该使用它。但是,如果您想在不支持它的浏览器(或其他环境,如旧的Node.js安装)中直接运行代码,那么当然您必须使用其他变体之一(实际上还有很多变体)。请查看是的,但这是lib,我的意思是js basict这不是库,它是JavaScript的下一个版本,已在.
    对象中实现。创建