我需要在内部函数oninit
中访问我的对象原型函数。下面的代码确实有效,但我需要的是在init函数中使用与self
相同的上下文,这样我就可以像this.loadData
一样调用原型函数。
请协助。
define([
'require',
'lodash-compat',
'BaseWidget'
],
function (require, _, BaseWidget) {
var Widget = function (options) {
this.set('url', '/some/endpoint/url');
var self = this;
_.assign(options, {
oninit: function () {
self.loadData.call(this);
},
oncomplete: function () {
//do something here
}
});
self.ractive = new BaseWidget(options);
};
Widget.prototype = {
loadData: function () {
var url = this.get('url');
// my async request
}
};
return {
initRactiveWidget: function (options) {
return new Widget(options);
}
};
});
答案 0 :(得分:0)
尝试直接将this
绑定到该函数。有关此https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
oninit: function () {
this.loadData();
}.bind(this)
答案 1 :(得分:0)
由于您已使用变量self
,因此系统会使用loadData
的预期值调用this
:
oninit: function () {
self.loadData();
}
简化示例:请注意loadData
正确打印this.name
:
var Widget = function() {
var self = this;
this.name = "Christian";
setTimeout(function() {
self.loadData();
}, 500);
}
Widget.prototype = {
loadData : function() {
console.log(this.name);
}
};
var w = new Widget();