所以我有一个对象的定义,看起来像这样:访问对象的对象定义中的属性
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