我正在使用javascript模块模式,并将所有函数作为对象成员返回,并且我正在尝试使用d3为on change处理程序添加闭包,但这不在闭包中的范围我是用于处理程序,我不知道如何把它放在范围内。所以我的模块看起来像:
var myMod = (function() {
return {
onChangeHandler: function(x, y) {
// handle event
},
createSelect: function(columnName) {
// create the select form element as categorySelect using d3
// add event handler using d3 api
// this version works, but the d3 arguments aren't the ones I want
categorySelect.on("change, this.onChangeHandler);
// so this is what I actually want
categorySelect.on("change", function() {
// but this gives an error
this.onChangeHandler(columnName);
});
}
};
})();
我在第二个版本中遇到的错误是:
TypeError:this.categoryFieldChanged不是函数
所以我认为我需要将this
传递给闭包,但是我不控制传递给闭包的参数,所以我该如何解决这个问题?
答案 0 :(得分:0)
只是把它全部输入(当然)。但是要分享答案:
我可以将this
存储在外部函数范围内的变量中, 然后在闭包内可用。例如:
createSelect: function(columnName) {
// create the select form element as categorySelect using d3
// add event handler using d3 api
var moduleThis = this;
categorySelect.on("change", function() {
// but this gives an error
moduleThis.onChangeHandler(columnName);
});
}
我还发现封闭内的this
引用了select,因此我可以使用this.value
获取新选择的值