0

作成したオブジェクトで this.foo を参照しようとしていますが、これは関数をトリガーした HTML 要素を参照しています。イベント経由で呼び出されたときに、これへの参照をオブジェクトに保存する方法はありますか?

何が起こっているかの例を次に示します。

$('document').on('click','button',object.action);

var object = {
  foo : null,
  action : function(){
    this.foo = "something";
  }
};

私が受け取るエラーは

Uncaught TypeError: Object #<HTMLInputElement> has no variable 'var' 
4

4 に答える 4

2

を保存したい場合thisは、おそらく次のようにイベントを添付する必要があります。

$('document').on('click','button',function() { object.action() });

また、質問に示されているようにこのオブジェクトを使用する場合は、object代わりにthis次のものを使用することもできます。

var object = {
  foo : null,
  action : function(){
    object.foo = "something";
  }
};

また、 BindCall、およびApplyについても理解しておくとよいでしょう。jQuery はこれらを舞台裏で使用してthis、HTML 要素に置き換えます。

また、varは予約済みのキーワードであり、プロパティ名には使用しないでください。本当にそうしたい場合は、文字列を使用して、次のような表記法"var"でアクセスします。[]

var a = {"var": 1}
a['var']
于 2013-09-26T15:50:53.417 に答える
0

varはJavaScriptの予約語です。

これはうまくいきます:

  $(document).ready(function(){

var myObj = {
  myVal: null,
  action:function(){
    this.myVal = "something"; 
  }

};
myObj.action();
console.log(myObj.myVal);

});

JS Binへのリンクはこちら

お役に立てれば幸いです。

于 2013-09-26T15:55:33.860 に答える
0

this.varに変更object.var

this呼び出された場所のコンテキストを参照する問題。object.actionボタンのクリックイベントから呼び出すので、ここにthisあり#<HTMLInputElement>ます。

varそして、すでに述べたように、変数名のような予約語を使用しないでください

于 2013-09-26T15:50:15.007 に答える
0

.apply()を使用して値objectとして渡すことができます:this

$('document').on('click','button',function(){object.action.apply(object); });

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

this参照する必要がありますが、JavaScriptの予約語である which をobject使用しているため、そうである可能性はほとんどありません。var

于 2013-09-26T15:53:22.037 に答える