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

时间:2016-12-01 03:36:36

标签: javascript jquery jquery-ui-widget-factory

我写了一个像这样的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!");
    }
});

现在它不起作用,因为this内的attr2没有引用窗口小部件实例,而是引用Window。如何在不直接命名的情况下引用窗口小部件实例?感谢。

2 个答案:

答案 0 :(得分:0)

在你的对象的构造函数中将函数绑定到它的上下文lke this:this._renderList = this._renderList.bind(this)

或者只是: " Sub_att&#34 ;: this._renderList.bind(this)

答案 1 :(得分:0)

我不确定非普通对象是否可以正常使用jQuery的小部件,但是。你可以试试这个。



var widgetData = (new class {
    get options() {
        return {
          attr1: "something1",
          attr2: {
             "sub_attr": this.__renderList,
             "css": {
                "opacity": '0.58'
              },
          },
       };
    }

    __renderList() {
       console.log("I should be invoked through attr2.sub_attr!");
    }
});

widgetData.options.attr2.sub_attr();