我有點困惑 我想出了在JavaScript中有很多方法如何做OOP 你能告訴我有什麼區別,哪一個是正確的嗎?面向對象的Javascript正確的方式
class Dog{
bark(){}
}
var Dog = {
bark : function(){}
}
var Dog = function(){
this.bark = function(){}
}
我有點困惑 我想出了在JavaScript中有很多方法如何做OOP 你能告訴我有什麼區別,哪一個是正確的嗎?面向對象的Javascript正確的方式
class Dog{
bark(){}
}
var Dog = {
bark : function(){}
}
var Dog = function(){
this.bark = function(){}
}
最後一個是稱爲構造函數的函數。你可以使用構造函數來創建像這樣的javascript對象:
var object = new Dog();
有如下
var object = new Object();
所有上述方法創建對象字面的正確方式中存在另一種方式來創建一個使用對象構造JavaScript對象。下面是使用對象文本的一些好處
'Object.create' –
的是JS,但仍然被引入browors不會工作類,二是使物體somethnig像一個數組,最後一個是空中接力的方式...如果你是什麼接力使用打字稿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社區普遍認同的,所以我建議你在大多數情況下使用它們。
'哪一個是正確的'爲了什麼目的?這個問題太廣泛了 - 你想達到什麼目的? –
我想這就像問哪個版本的GNU CCC是最好的。當然,最新的穩定版本。所以'class Dog'是 – Victor
第一個('class Dog')是ES6。所以如果你在一個支持ES6的環境中運行你的代碼,那麼你應該使用它。但是,如果你想直接在不支持它的瀏覽器(或其他環境,如舊的Node.js安裝)中運行你的代碼,那麼當然你必須使用其他變體之一(實際上有更多)。 – jcaron