2015-02-06 58 views
2

我是JavaScript的新手,我試圖圍繞constructor函數和prototypes打包。我有Ruby的一些經驗,所以當學習新的JS功能時,我儘量將它們等同於它們在Ruby中類似的功能。在定義構造函數之後,是否可以將實例屬性添加到JavaScript原型中?

對我來說,好像prototypes類似於Ruby類。所以我的問題是,是否可以使用className.prototype命令將所需的屬性添加到對象的實例中,還是有必要重新打開Ruby中的class/prototype

例如,說我有以下constructor函數來創建一個汽車原型:

function Car (make,model,year) { 
    this.make = make; 
    this.model = model; 
    this.year = year; 
} 

,我創建了幾個汽車:

myCar = new Car ("Honda", "Civic", 2015); 
anotherCar = new Car ("Ford", "Focus", 2001); 

現在讓我們假設下來,我想新行Car的實例接受color參數(即繼承父項的color屬性)。是否有可能做類似以下的事情

Car.prototype.color = color; 

這樣,當一輛新車初始化,它會期望一個顏色參數被傳遞?也就是說,汽車constructor功能現在應該(但沒有我不得不改變了它自己):

function Car (make, model, year, color) { 
    this.make = make; 
    this.model = model; 
    this.year = year; 
    this.color = color; 
} 

,因此新的實例應該如下初始化:

aThirdCar = new Car("BMW","325",2008,"black"); 

或者,我必須回去到原來的constructor功能並手動進行這些更改?

據我所知,使用className.prototype.methodName是此功能的主要用途,以便所有實例共享一個方法,而不是使用它們自己的方法進行初始化。

我對這個功能的興趣是爲了我自己對JS可以做什麼和不可以做什麼以及應該做什麼的興趣。

謝謝。

+2

不,不,構造函數不會「創建原型」。構造函數**有一個原型。 Ruby繼承和JavaScript繼承有很多不同之處。 – Pointy 2015-02-06 00:10:34

+2

不,更改原型對象與構造函數的形式參數列表完全無關。在定義之後,你不能改變它。 – Pointy 2015-02-06 00:11:10

+0

謝謝@Pointy,這是有益的,很高興知道。 – 2015-02-06 00:17:10

回答

0

您應該能夠使用原型定義新方法,但不知道是否可以更改輸入參數編號。

car.protype.color =函數(){ 返回 「紅色」 }

在紅寶石你既可以改變的參數數量以及使用metaprogrammimg

ruby​​_object定義一個新的方法(* args) ruby​​_object.define_method()

相關問題