我有一个构造函数:
var ProfileDialog = function (containerObj) {
this.init = function () {
this.container = containerObj;
let content = document.createElement('div');
content.innerText = 'Dialog here';
this.container.appendChild(content);
this.container.style.display = 'none';
};
this.init();
};
然后我像这样扩展构造函数的原型:
ProfileDialog.prototype.open = function () {
this.container.style.display = 'block';
}
var dlg = new ProfileDialog(document.body)
dlg.open();
这很好用,但如果我尝试将.open()
放在这样的对象中:
ProfileDialog.prototype.actions = {
open: function () {
this.container.style.display = 'block';
}
}
var dlg = new ProfileDialog(document.body)
dlg.actions.open();
失败并显示错误
functional.js:25未捕获的TypeError:无法读取未定义的属性'style'(...)
因为传递给函数的上下文错误。
如何确保独立于嵌套,上下文始终是实例化对象?
答案 0 :(得分:0)
你可以尝试绑定这个' to actions.open
答案 1 :(得分:0)
也许您之前将this
保存到that
并将其作为init
功能的闭包。
var ProfileDialog = function (containerObj) {
var that = this;
this.init = function () {
that.container = containerObj;
let content = document.createElement('div');
content.innerText = 'Dialog here';
that.container.appendChild(content);
that.container.style.display = 'none';
};
this.init();
};