2010-07-19 15 views
0

我會把我的代碼以簡單的方式,但如果有好的靈魂想幫助代碼爲|on Github| /lib/inmotion/editor.js(line 99)爲什麼這個JavaScript的OO是錯的?

editor.js內

function Editor(){ 
    var instance = this; 
    this.key_frames = [] // a list of key frames 
    this.kf = null // the current KeyFrame 

    function notice_click(click){ 
    instance.kf.add_bone(1) // <-- error here 
    // instance.kf.list.push(1) // <-- this works, but is incomplete 
    } 
} 

key_frame.js

function KeyFrame(){ 
    instance = this 
    instance.changed = false // for the redraw :) 
    instance.list = [] 

    function add_bone(bone){ 
    instance.list.push(bone) 
    instance.changed = true 
    return true 
    } 
} 

我的程序有有大量的關鍵幀實例的獨特的編輯器實例。
每個KeyFrame都有很多骨頭。
所以總有一個活動KeyFrame,由Editor.kf實例定義
由於我只有一個kf,我可以添加骨頭到沒有問題的骨骼,但是當我添加更多的KeyFrame時,我只能將add_bone添加到最後一個kf我創建!爲什麼?

如果我不夠清晰,我很抱歉,請在懷疑

+2

首先,**使用分號**,是的,他們有時是可選的......當你開始時,沒有合法的藉口*不使用它們,使用它們,明確。其次,'instance = this'設置一個名爲'instance'的* global *變量,你需要'var instance = this;'因爲它是本地的。 – 2010-07-19 03:43:56

+0

@Nick Craver:是的,確切地說,你不想讓這個答案成爲我可以接受的選擇嗎? – 2010-07-19 06:33:45

回答

1

KeyFrame對象缺少var,它應該是這樣的:

function KeyFrame(){ 
    var instance = this; 
    instance.changed = false; 
    instance.list = []; 

    function add_bone(bone){ 
    instance.list.push(bone); 
    instance.changed = true; 
    return true; 
    } 
} 

沒有var關鍵字您定義或覆蓋window.instance,一個全球變量,而不是當地的一個對象像你想:)

+0

是啊..那真是愚蠢的我,ty! – 2010-07-19 16:55:55

2

的問題,據我瞭解,是「實例」被每次調用關鍵幀的時間覆蓋。你應該直接使用'this'。

+0

我以前對「這個」也一樣,但是這個傢伙在這裏給出了一個很好的解釋:http://stackoverflow.com/questions/3045953 – 2010-07-19 06:46:51