Javascript:如何在这样的options对象中引用owner对象的所有者?

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

我编写了一个jQuery UI小部件,如下所示:

$.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和类声明。