所以我有一個對象的定義,看起來像這樣:訪問對象的對象定義中的屬性
var Foo = window.Foo = {
MIN_ROWS : 10,
MIN_COLS : 10,
NUM_ROWS : (function(){ return Math.max(parseInt(this.params.rows) || 0, this.MIN_ROWS); })(),
// etc...
params: (function(){ /* ... */ })() // parses the GET querystring parameters from the URL and returns as a JSON object
}
對於NUM_ROWS
財產,我想將其設置爲Foo.params.rows
,如果它存在,它比MIN_ROWS
更大,否則將其設置爲MIN_ROWS
。
我已經想通了的邏輯,這,這是給我的麻煩的唯一的事情就是當我自我調用如上功能,this
變量是指window
,而不是Foo
因爲我期望它。 (這是我在控制檯中得到的錯誤信息:"TypeError: Result of expression 'this.params' [undefined] is not an object."
)
如果我不自我調用該函數,它會很好地工作。但是,我希望NUM_ROWS
是一個整數,而不是函數,所以我可以在我的代碼的其他部分以Foo.NUM_ROWS
而不是Foo.NUM_ROWS()
的身份訪問它。
有誰能幫我解決這個問題嗎?
對於那些誰勸定義'PARAMS 'NUM_ROWS'之前:我認爲它不重要。 我試着在NUM_ROWS上面移動'params',我仍然得到相同的錯誤信息。 這個錯誤是說''this.params'[undefined]不是一個對象',但在這個上下文中,'this'指的是全局'window'對象,而不是'Foo'對象,正如我在'NUM_ROWS'函數開頭插入'console.log(this)'所發現的那樣。 – gabriel 2009-09-08 16:41:12
答案更新...實際上,這是合乎邏輯的,因爲它總是在函數中被稱爲函數,而不是被稱爲方法... – back2dos 2009-09-08 17:05:31
@gabriel,我快速瀏覽了這個,並且改變了我的文章,你可能得到這個排序。自從我在不使用框架的情況下查看js,這已經有一段時間了,所以你可以比我的例子更好,但是我希望它解決了你使用this關鍵字時遇到的問題。 – 2009-09-09 09:15:02