Javascript:如何在这样的options对象中引用owner对象的所有者?
我编写了一个jQuery UI小部件,如下所示:Javascript:如何在这样的options对象中引用owner对象的所有者?,javascript,jquery,jquery-ui-widget-factory,Javascript,Jquery,Jquery Ui Widget Factory,我编写了一个jQuery UI小部件,如下所示: $.widget("ns.wid", { options: { attr1: "something1", attr2: { "sub_attr": this.__renderList, "css": { "opacity": '0.58' }, }, }, __r
$.widget("ns.wid", {
options: {
attr1: "something1",
attr2: {
"sub_attr": this.__renderList,
"css": {
"opacity": '0.58'
},
},
},
__renderList: function() {
console.log("I should be invoked through attr2.sub_attr!");
}
});
现在它不工作了,因为
attr2
中的this
没有引用小部件实例,而是引用了窗口。如何引用小部件实例而不直接命名它?谢谢。在对象的构造函数中将函数绑定到其上下文lke this:this.\u renderList=this.\u renderList.bind(this)
或者只是:
“Sub_att”:this.\u renderList.bind(this)我不确定非普通对象是否能与jQuery的小部件一起正常工作,但是。你可以试试这个
var widgetData=(新类{
获取选项(){
返回{
属性1:“某物1”,
属性2:{
“sub_attr”:这个,
“css”:{
“不透明度”:“0.58”
},
},
};
}
__renderList(){
log(“应该通过attr2.sub_attr调用我!”);
}
});
widgetData.options.attr2.sub_attr()代码>我听说了一些关于.bind()的坏消息,它在Javascript中被认为是坏做法吗?顺便说一下,您的第二种方法不起作用,因为这里指的是窗口对象。第一条路,那条线应该去哪里?在一个原型里面。哇,我相信我们会发现太多赞成的意见,太多反对的意见。我认为首先你应该了解JS中的上下文和“this”是如何工作的,也许你不需要在那个对象中声明_renderList,绑定根本就不存在。“绑定”有效吗?要使用第一种方法,必须使用构造函数,这意味着您需要使用ES6和类声明。