我正在尝试使用这样的东西:
var a = Marionette.Object.extend({
initialize: function () {
//Works fine
this.listenTo(this, "something", function(){...});
//Problem
(function(){
this.listenTo(this, "somethingElse", function(){...});
})();
//Same...
var b = function(){
this.listenTo(this, "somethingElse", function(){...});
}
b();
}
});
当我尝试运行此代码时,它会说:
无法读取未定义的属性'listenTo'
用于功能。但问题是为什么?
据我所知,initialization:
get被调用,当一切准备就绪时,这就是为什么开头的另一个听众工作的原因。如果我将监听器放入函数中,它应该是相同的,因为,当它被调用时,对象已经初始化,因此this
存在。
任何想法如何解决这个问题,将侦听器留在函数内?
提前致谢!
上述解决方案(感谢sp00m)
- 新问题 -
在对象中实现相同的目标:
var a = Marionette.Object.extend({
b: (function(){
this.listenTo(this, "somethingElse", function(){...});
})()
});
答案 0 :(得分:1)
您可以使用var self = this
成语:
var a = Marionette.Object.extend({
initialize: function () {
var self = this; // maintain a reference to initialize's this
(function(){
self.listenTo(self, "somethingElse", function(){...});
})();
}
});
答案 1 :(得分:0)
使用this
:
.bind(this)
传递给您的函数
var a = Marionette.Object.extend({
b: (function(){
this.listenTo(this, "somethingElse", function(){...});
}.bind(this)()
});
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind