2017-08-15 69 views
1

我使用的功能()作爲類和我創建使用this.範圍一些化子性質:Javascript:無法設置undefined的屬性;使用功能類

function field(newMaxX, newMaxY) { 
    this.maxX = newMaxX; 
    this.maxY = newMaxY; 
} 

但是,這導致此錯誤:使用

Uncaught TypeError: Cannot set property 'maxX' of undefined

我已經寫project具有相同的功能沒有錯誤。

function snake(nX, nY, nScore, nDirection, maxX, maxY, cellSize) { 
    this.cells = []; 
    this.score = nScore; 
    ... 
} 

而且JQuery的這個問題指出:

jQuery.Deferred exception: Cannot set property 'maxX' of undefined TypeError: Cannot set property 'maxX' of undefined

我不知道如何解決。請幫忙。

+0

此代碼完全正常。你可以簡單地將它粘貼到你的控制檯中,並看到它工作正常。你能分享一下你的電話號碼嗎?這個錯誤應該在其他地方 – quirimmo

+1

實例化你的'snake'函數,在'new'關鍵字的某處或通過'.call','.apply'或'.bind'方法應用上下文?我認爲你需要編輯並提供更多信息。 (順便說一句,如果你正在聲明一個類,我說的是'snake',這是最好的做法,例如'function Snake(){}') – Sgnl

+0

整個'蛇'項目在鏈接'項目' - http://www.gvp.cz/~vecernik/snake/我知道有一些錯誤,但在這個網站上傳需要一些時間。 –

回答

0

好的,我發現這個問題。我只是忘了使用new關鍵字:

gameArea = field(parseInt(MAX_X/CELL_SIZE), parseInt(MAX_Y/CELL_SIZE)); 

這並不工作,但這樣做:

gameArea = new field(parseInt(MAX_X/CELL_SIZE), parseInt(MAX_Y/CELL_SIZE)); 

謝謝您的意見。

+0

這裏有一個技巧來幫助你[避免忘記調用'new'](http://js-bits.blogspot.com/2010/08/constructors-without-using-new.html) –

+0

@JuanMendes - 有趣的文章,謝謝! –

+1

@theRadek - 你應該明確地做的一件事,無論你是否使用Juan提及的技巧,都遵循標準的JavaScript約定,並以大寫字母開頭構造函數名稱,並使用小寫字母開頭所有其他函數。當你這樣做時,大寫字母將成爲使用'new'的提醒。所以這個函數應該被命名爲'Field()'而不是'field()'。然後當你看到一個沒有'new'的'Field()'的時候,只會調用_look_錯誤,反之,如果你看到'new field()',那也會看起來錯誤。 –

相關問題