0

私は次のコードがこれの外側にアクセスできることを知っています。


var o = function() {
    var that = this;
    this.a = 1;
    $('html').click(function() {
        alert(that.a);
    });
}
new o();

ただし、同じ1つのオブジェクトに2つの変数名(たとえば、thisとthat)を使用したくありません。そして、私はすべてのクラスに
繰り返し書きたくありません。 その代わりに_thisを使用する次のコードは少し簡単だと思います。var that = this



var o = function() {
    var _this = this;
    this.a = 1;
    $('html').click(function() {
        alert(_this.a);
    });
}
new o();

しかし、他にもっと簡単で短い方法はありますか?

4

2 に答える 2

1

createDelegate私はExtの関数が本当に好きです。この関数を使用すると、関数のthis作成時に任意の関数の値を設定できます。

createDelegateこれは、ページに含めることができる機能の少ないバージョンです。

Function.prototype.createDelegate = function(thisObj) {
    var method = this;
    return function() {
        return method.apply(thisObj || window, arguments);
    };
}

そして、これがあなたの例でそれをどのように使うことができるかです、決してthis変数に設定しないでください:

var o = function() {
    this.a = 1;
    $('html').click(function() {
        alert(this.a);
    }.createDelegate(this));
}
new o();

ExtのフルバージョンではcreateDelegate、2番目の引数としてパラメーターを渡すことができます。パラメーターは、デリゲートを作成している関数に定期的に渡される引数のリストの代わりに使用したり、挿入したり、追加したりできます。

于 2011-04-19T02:51:18.660 に答える
0

これは似たようなコードですが、例よりも「安全」だと思います。「o」のインスタンスを複数作成すると、各インスタンスで「a」プロパティが更新される可能性があります。

var bar = function() {
        var that = {};
        that.a = 1;
        that.showA = function () {
            $('html').click(function() {
                alert(that.a);
            });
        };
        return that;
}
var instanceOfBar = bar();
instanceOfBar.showA();

私はここでベースから外れているかもしれません、数ヶ月間javascriptを手に入れていなかったので、現時点ではさびています

于 2011-04-19T02:49:28.983 に答える