2017-05-03 92 views
0

我最近開始學習Javascript,並試圖圍繞幾個重要的概念。根據我的理解,直到現在,Javascript沒有類,它使用構造函數而不是類來爲對象創建藍圖。例如:Javascript的構造函數與Typescript類

// javascript code 
var Car = function() { 
    // this is a private variable 
    var speed = 10; 

    // these are public methods 
    this.accelerate = function(change) { 
    speed += change; 
    }; 

    this.decelerate = function() { 
    speed -= 5; 
    }; 

    this.getSpeed = function() { 
    return speed; 
    }; 
};  
// typescript code 
class Car { 

    public speed: number = 10; 

    public acceleration(accelerationNumber: number): void { 
    this.speed += accelerationNumber; 
    } 

    public decelerate(decelerateNumber: number): void { 
    this.speed += decelerateNumber; 
    } 

    public getSpeed(): number { 
    return this.speed; 
    } 
} 

以上打字稿代碼更有道理,因爲我們有一個創建該類的對象的藍圖類。但是,在Javascript中,這個藍圖正在創建一個功能。那麼這是否意味着JavaScript中的構造函數與Typescript/Java /等中的類沒有相同的作用?

+1

這兩個不完全等價。 Javascript版本應該使用'prototype'來定義方法並將'speed'放在'this.speed'上。 – deceze

+0

是的。你的「類」將被轉換爲int function(){},它將被用關鍵字new調用。這就像語法糖一樣。但是在ES6中,課程將以標準形式出現(如同樣也是糖)。 https://googlechrome.github.io/samples/classes-es6/ – Vitalii

+0

「Javascript does not have classes」 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes Are你是指字面意思還是說,JavaScript類的實現在體系結構上與其他語言不同? – Zze

回答

1

正確相當於打字稿類將是:

var Car = function() { 
    this.speed = 10; 
}; 

Car.prototype.accelerate = function (change) { 
    this.speed += change; 
}; 

Car.prototype.decelerate = function() { 
    this.speed -= 5; 
}; 

Car.prototype.getSpeed = function() { 
    return this.speed; 
}; 

Car函數,構造函數,基本上是什麼constructor()處於class;它是執行什麼來初始化一個新的實例。 prototype上的所有功能都是在所有實例共享的類中定義的其他方法。

+0

謝謝@deceze!但是如果我們有一個構造函數'Car',那麼這個類在哪裏定義呢?因爲據我所知,構造函數用於創建一個類的新對象。在這種情況下定義的類在哪裏? – Aiguo

+2

它不是。這個魔法在'new'關鍵字中。它構造一個新的對象,用構造函數初始化它,並確保它從'prototype'繼承。這與其他大多數OO語言發生的情況沒有多大區別,只是沒有使用關鍵字'class'的語法表達。你實際上看到了更多的細節如何在Javascript中製作香腸。 – deceze

+2

原型對象充當模板。 https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes – Allan