2014-09-26 47 views
0

我正在閱讀一些JavaScript書籍和做一些練習,我在做以下事情時有點卡住: 重構電影類作爲一個模塊,保留您以前的代碼以供參考。重構Javascript類作爲一個模塊

我以前的代碼是這樣的:

function Movie(){ 
    this.attributes = { 
     title : '', 
     duration : '', 
     director : '', 
     actor : [] 
    } 
} 

Movie.prototype.set= function(attr , value){ 
    this.attributes[attr] = value; 
} 

Movie.prototype.get = function(){ 
    console.log(this.attributes.title); 
    return this.attributes.title; 
} 

Movie.prototype.play = function(){ 
    console.log ('Playing '+this.attributes['title']+'...'); 
} 

Movie.prototype.stop= function(){ 
    console.log ('Stopped '+this.attributes['title']+'...'); 
} 

我不知道我應該怎麼做才能重構它。我讀了很多,但我不知道如何使用它作爲一個類(或者如果這是可能的),例如現在我可以通過做var titanic = new Movie()創建更多的電影,如果我創建一個模塊,我不要怎麼做。

+4

你所說的 「模塊」 是什麼意思?這有點含糊。 – nnnnnn 2014-09-26 13:48:01

+1

你的代碼是一個完美的模塊。它會導出一個'Movie'符號。 – Bergi 2014-09-26 13:49:36

+0

或者:本書/練習中的「模塊」是什麼意思?也許你可以鏈接或引用它,或者至少提到標題。 – Bergi 2014-09-26 13:50:44

回答

0

您可以使用這些guides

var Movie = function() { 

    var model = { 
    attributes : { 
     title : '', 
     duration : '', 
     director : '', 
     actor : [] 
     } 
    }; 

    model.set = function (attr , value) { 
     model.attributes[attr] = value; 
    } 

    model.get = function() { 
     return model.attributes; 
    } 

    model.play = function(){ 
     console.log ('Playing '+this.attributes['title']+'...'); 
    } 

    model.stop= function(){ 
     console.log ('Stopped '+this.attributes['title']+'...'); 
    } 

    return model; 
}); 

重構它和使用它像這樣

var movie1 = new Movie(); 
var movie2 = new Movie(); 
+0

你可以,但是你爲什麼? – nnnnnn 2014-09-26 13:59:51

+0

我認爲這種方式代碼更清潔。但是,是的,這是我的看法,而不是需要遵循的東西。 – 2014-09-26 14:05:04

+0

我試圖提示您爲答案添加更多解釋。請注意,使用'this.play = function(){}'將函數移動到構造函數中會有效地完成同樣的任務,但要稍微簡短一些(不需要返回)。除此之外,任何一種方式都可以消除在原型上具有功能的優勢... – nnnnnn 2014-09-26 14:11:16