2017-03-05 56 views
0

我有點困惑 我想出了在JavaScript中有很多方法如何做OOP 你能告訴我有什麼區別,哪一個是正確的嗎?面向對象的Javascript正確的方式

class Dog{ 
bark(){} 
} 

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

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

'哪一個是正確的'爲了什麼目的?這個問題太廣泛了 - 你想達到什麼目的? –

+0

我想這就像問哪個版本的GNU CCC是最好的。當然,最新的穩定版本。所以'class Dog'是 – Victor

+1

第一個('class Dog')是ES6。所以如果你在一個支持ES6的環境中運行你的代碼,那麼你應該使用它。但是,如果你想直接在不支持它的瀏覽器(或其他環境,如舊的Node.js安裝)中運行你的代碼,那麼當然你必須使用其他變體之一(實際上有更多)。 – jcaron

回答

0
  1. 第一個在ES6中引入。這有助於來自其他編程語言(如Java)的程序員輕鬆編寫JavaScript。
  2. 使用JavaScript對象字面量的第二次創建對象。
  3. 最後一個是稱爲構造函數的函數。你可以使用構造函數來創建像這樣的javascript對象:

    var object = new Dog();

有如下

var object = new Object(); 

所有上述方法創建對象字面的正確方式中存在另一種方式來創建一個使用對象構造JavaScript對象。下面是使用對象文本的一些好處

  1. 其較短鍵入
  2. 它強調的對象僅僅是可變的哈希值,而不是東西,需要從「配方」(從類)
出爐
+0

'Object.create' –

-2

的是JS,但仍然被引入browors不會工作類,二是使物體somethnig像一個數組,最後一個是空中接力的方式...如果你是什麼接力使用打字稿JavaScript的OOP我

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

看看[ES6](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes) – Victor

+0

是的,但那是lib我的意思是js basic – Bc96

+0

這不是一個庫,它是下一個JavaScript版本,已經在[少數瀏覽器](https://kangax.github.io/compat-table/es6/)中實現。 – Victor

1

如果您知道你有ES6功能可用,我會第一個選項去:

class Dog { 
    bark() { 
    // code here 
    } 
} 

其他方式ÿ你提到有缺陷。

  • 第二種方式創建對象實例,而不是類。
  • 第三種方法是可以接受的,但在大多數情況下,最好將方法附加到原型上。

如果不能確定是否有可用的 ES6功能,比做到這一點:

function Dog() { 
    // init 
} 

Dog.prototype.bark = function() { 
    // code here 
}; 

編輯: 正如其他人所指出的,你的問題是有些情境和/或基於輿論。也就是說,不同的情況可能需要不同的方法,不同的開發人員會根據他們的個人品味給出不同的答案。不過,上面給出的答案是JS社區普遍認同的,所以我建議你在大多數情況下使用它們。