2

ネストされた関数でスコープを保持する必要がある場合は、変数を this のように作成し、ネストされた関数var that = this;で参照thatするのが慣例です。3度以上の大会名は?

また、プロキシが使用されているいくつかの状況に遭遇しましたが、JQuery でネストされたプロキシを渡す必要はありませんでした。proxyネストされたsに特別なものはありますか

通常のスコープの問題がバックボーンで発生し、別のレベルに下がらなければならない可能性があります (私たちはまだ取り組んでいます):

keyPressed: function(keyEvent) {
if(case1 && case2 && case3) {
  if(anotherCase) {
    .....
  }
  else if(yetAnotherCase) {
    ....
    var that = this;
    window.waitIntervalID = window.setInterval(function() {
      if(that.waitCount == 2) {
        that.isWaiting = false;
        that.waitCount = 0;

        that.mainCounter = 0;
        that.isRecording = true;
        for(var i = 0; i < that.signature; i++) {
          that.beatArray[i] = 0;
        }
        window.tapIntervalID = window.setInterval(function() {
          that.count = that.mainCounter + 1;              
          that.mainCounterTime = new Date().getTime();
          that.mainCounter = (that.mainCounter + 1) % that.signature;
        }, that.average);
        that.isTapping = false;
        that.countIn = 1;
        var bpm = 1000 / that.average * 60;
        that.set('tempo', bpm);
        window.clearInterval(waitIntervalID);
      }
      that.waitCount++;
    }, this.average);
    this.countIn++;
  }
}
},

プロキシ スコープ:

    // add click handler to this beat
    $('#beat'+this.model.cid).click($.proxy(this.toggle, this));
    return this;
4

1 に答える 1

6

thatまたはのような一般的な名前ではなく、扱う項目に固有の変数名を使用することをお勧めしselfますme。次に、どの名前を使用するかは明らかです。

たとえば、thisが DOM 要素の場合、次のように使用できます。

var element = this;

thisがオブジェクトの場合Cat(このページの広告に猫が表示されているので思い浮かびます)、次のように使用できます。

var cat = this;

もちろん、さらに具体的な要素や猫などを扱っている場合は、それよりも具体的な名前を使用できます。単一の一般的な DOM 要素を処理する関数elementがある場合、変数を呼び出すことができますが、たとえば、それが a<ul>と aを処理する場合は、それぞれの変数名にandを<li>使用できます。または、コード内で意味のある名前。ulli

また、this可能な場合は完全に使用しないでください。典型的な jQuery コードでの の使用の多くは、や などのthis関数から来ています。$.each()$().each()

$('.foobar').each( function() {
    var element = this;
    $(element).on( 'click', function() {
        alert( 'Clicked = ' + element.id );
    });
});

.each()代わりに名前付きパラメーターを使用する方がはるかに優れています。

$('.foobar').each( function( i, element ) {
    $(element).on( 'click', function() {
        alert( 'Clicked = ' + element.id );
    });
});

ネストされた関数での使用に関する質問については、コード構造nestedCatを参照する変数名は絶対に使用しません。代わりに、名前は話している内容を参照する必要があります。

そもそも巣猫とは?これは子猫に違いないと思います。

function Cat( args ) {
    this.sex = args.sex;
    this.name = args.name;
    this.kittens = args.kittens;
}

var mommyCat = new Cat({
    sex:'F',
    name: 'Mommy Cat',
    kittens: [
        new Cat({ sex: 'M', name: 'Tom Kitty' }),
        new Cat({ sex: 'F', name: 'Cute Kitty' })
    ]
});
console.log( mommyCat );
mommyCat.kittens.forEach( function( kitten ) {
    console.log( kitten );
});

それはログに記録します:

Cat {sex: "F", name: "Mommy Cat", kittens: Array[2]}
Cat {sex: "M", name: "Tom Kitty", kittens: undefined}
Cat {sex: "F", name: "Cute Kitty", kittens: undefined}
于 2013-04-28T16:36:57.703 に答える