6

私はここで概説されているときにthisいないことについての基本的な考えを理解していますが、正直に言うと、それは少し博識になります。したがって、より平凡な言葉で:methodstrict mode

私はそのようなハンドラーを持っています:

$('.myClass').one('keyup', function() {
    var $this = $(this);
    etc etc
});

これに変更したい:

function myFunction () {
    var $this = $(this);
    etc etc
};
$('.myClass1').one('keyup', myFunction);
$('.myClass2').one('keyup', myFunction); etc

メソッドの外でstrict mode使用しているので、それは好きではありません。thisわかりました。

ただし、myFunction(1)さまざまなクラス/要素にアタッチされており、(2)さまざまなポイントでさまざまなクラス.off().one('keyup', myFunction)のハンドラーをリセットするために使用しているため、ハンドラーとは別にする必要があります。one

thisでは、ビジネスに違反することなく、別のコールバック関数を使用する方法を教えてください。

4

4 に答える 4

6

厳密モードでは、これがメソッドに含まれていないという基本的な考え方がわかります...

はい。ただし、厳密モードとJSLintという2つの無関係なものを混同しています。それらはほとんど無関係です(JSLintに厳密モードを要求するオプションがあることを除いて)。

厳密モードのコードには問題はありません。これは完全に有効で適切です(jQueryの使用方法のためthis)。そこには「厳密な違反」はありません。

JSLintはそれを好きではありませんが、JSLintは完全に有効で適切な多くのものを好きではありません。JSLintは、問題であると非常に広く認識されているもの(セミコロンの欠落など)と、スタイルの観点からDouglasCrockfordが気に入らないものの組み合わせを検出します。Crockfordのインテリジェントで十分な情報に基づいていますが、誰もが彼のスタイルの選択に同意しているわけではありません。

Lintツールは非常に役立ち、ツールキットの重要な部分です。JSLintは、実体の問題とスタイルの問題を混同することで、(私の見解では)それほど役に立ちません(ただし、JavaScriptを使用すると、問題はありません)。JSHintの使用を検討することもできます。これは、チェック対象をより細かく制御できるフォークです。

于 2012-07-26T08:13:00.650 に答える
1

代わりにイベントオブジェクトを使用できませんか?

すなわち

function myFunction (e) {
    var $this = $(e.currentTarget);
};

例: http: //jsfiddle.net/gRoberts/cRnb3/

于 2012-07-26T08:13:10.103 に答える
0

次のように、トラフを通過したイベントオブジェクトのcurrentTargetを読み取ることができます。

function myFunction (event) {
    var $this = $(event.currentTarget);
    etc etc
};
$('.myClass1').one('keyup', myFunction);
$('.myClass2').one('keyup', myFunction); etc
于 2012-07-26T08:15:15.157 に答える
0

これを試して

function myFunction () {
    var $this = $(this);
    etc etc
};
var obj=  $('.myClass1');
obj.myFunction =myFunction ;

obj.one('keyup', myFunction);
obj.one('keyup', myFunction); etc
于 2012-07-26T08:24:10.300 に答える