2014-09-26 42 views
-1

我想學習更多的Javascript,所以我正在讀一些書,並做一些練習練習我正在學習。其中excercises的說以下內容:觀察類,它是什麼,應該做什麼

1 - 創建一個Movie對象:

電影

-attributes:HashMap的

  • 播放()

  • 停止()

  • set(attr:string,value)

  • GET(ATTR:字符串)

2 - 添加偵聽 「玩」 和「停」事件MovieObserver類。

我做了以下內容:

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

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

Movie.prototype.get(){ 
    console.log(this.attributes['title']); 
    return this.attributes['title']; 
} 

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

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

什麼,我需要知道的是MovieObserver應該做的事情,我無法理解這一點。

+0

這看起來不是有效的語法。 – elclanrs 2014-09-26 02:13:36

+0

從技術上講,JavaScript沒有類,但基本上它們是作爲函數實現的。你可以這樣做:'像''Movie'一樣操作ClassName(){...}。另外請注意,您想在'attributes'中使用':'而不是'='作爲對象。左邊沒有字符串:'varName:'value''。 – 2014-09-26 02:14:06

+0

http://addyosmani.com/resources/essentialjsdesignpatterns/book/#observerpatternjavascript – sabithpocker 2014-09-26 02:20:04

回答

0

真的只是一個評論。

所以我覺得沒關係,

不,事實並非如此。在構造函數中屬性對象沒有被分配到實例(與所謂分配給構造函數的這個),所以你可能希望(斯賓塞的修復):

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

所以,現在當你這樣做:

var movie = new Movie(); 

console.log(movie.attributes.duration) // 0 
+0

所以正確的做法是{this.attributes = {'title':'undefined'//或標題:'undefined')?this.attributes = { 'title' 使用或不使用字符串作爲密鑰 – 2014-09-26 03:08:49

+0

@AleMoyano你選擇哪個並不重要,除非你的密鑰使用了無效變量名稱的字符'{name:「Bob」,「age + isUnemployed?」 :「32:true」}'。這可能不會發生很多次。另外,'未定義'不是JS中的字符串,除非你真的希望它在每個地方都說'未定義'。即使如此,undefined的字符串表示也是未定義的。另外,您的'Movie.prototype.method;'聲明應該是'Movie.prototype.method = function(){};' – Norguard 2014-09-26 04:01:00

+0

@ AleMoyano - 通常您不會爲* undefined *初始化屬性而煩惱,只需將它們設置爲你有一個有用的價值。 – RobG 2014-09-26 07:52:11

相關問題