我有这个奇怪的问题,我无法理解:
我有一个包含3个元素的对象(对这个问题很重要):
base_url: 'http://resttest.******.com/v1/',
remind_url: function() { console.log(this.base_url); return this.base_url +'/member/passwordreminder/' },
login_url: function() { console.log(this.base_url); return this.base_url + '/member/login' },
它们在对象中看起来像这样:
app.controllers.login = new Ext.Controller({
/**
* @cfg url
* Login request URL
*/
base_url: 'http://resttest.******.com/v1/',
remind_url: function() { console.log(this.base_url); return this.base_url +'/member/passwordreminder/' },
login_url: function() { console.log(this.base_url); return this.base_url + '/member/login' },
当我调用remind_url时,base_url等于它应该是什么('http:// resttest。 ** .com / v1 /'),但是当我调用login_url时,base_url是未定义的
为什么?
答案 0 :(得分:1)
我猜这是this
的问题。当base_url
未定义时,可能是因为this
是全局对象,而不是您的对象。你有什么东西绑定remind_url
到this
?例如,在Backbone.js中,视图通常使用Underscore.js这样的行:
_.bindAll(this, 'remind_url, 'login_url', etc);
将所有被调用的方法绑定到this
的回调。
要确认这一点,请将console.log(this.base_url)
更改为console.log(this)
,以了解此情况下的this
。
答案 1 :(得分:0)
感谢Renesis提出正确的问题!
我一直将调用视为一种方法,而不是函数 - this.login_url = undefined,但this.login_url()不是。