2016-12-01 6 views
3

私はこのようなjQueryのUIウィジェットを書いた:Javascript:このようなオプションオブジェクト内のオーナーオブジェクトのオーナーを参照するにはどうすればよいですか?

$.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ではなく、それはWindowを参照して、ウィジェットのインスタンスに参照しないよう今では、働いていません。どのように私はウィジェットのインスタンスを直接命名することなく参照することができますか?ありがとう。 this._renderList = this._renderList.bind(この)

それとも: "Sub_att":あなたのオブジェクトのコンストラクタで

答えて

0

このLKEそのコンテキストに関数をバインドするthis._renderList.bind(この)

+0

は私がについて悪い何かを聞いた.bind()、それはJavaScriptで悪い習慣を検討しているのですか? –

+0

ところで、2番目の方法は機能しません。これはWindowオブジェクトを参照するためです。最初の方法では、その行はどこに行くべきですか?プロトタイプ内部。 –

+0

うわー、私は賛成であまりにも多くの意見を見つけることができたと確信して、反対意見が多すぎます。私は最初にJSでコンテキストと 'this'がどのように動作しているのかを理解する必要があります。おそらく、_renderListをそのオブジェクトに宣言する必要はなく、バインドは全く行われません。バインドは機能しますか? –

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();

関連する問題