jQueryウィジェット内のすべての関数の開始時に、「自己」、「要素」などを定義する必要がありますか

StackOverflow https://stackoverflow.com/questions/19842499

質問

このようなJqueryウィジェットを作成します

<script type="text/javascript">
(function ($) {
        $.widget("cb.bacon", {
            _create: function() {
                var self = this,
                    o = self.options,
                    el = self.element;

                 // Some code

            },

            _bacon: function() {
                var self = this,
                    o = self.options,
                    el = self.element;

                 // Some code
            },

            _smokey: function() {
                var self = this,
                    o = self.options,
                    el = self.element;

                 // Some code
            } 
        });
    })(jQuery);                 
</script>

私は常に宣言しなければなりません self, options, element 私が作成する各関数で。

私が行方不明になっているという財産的な理解はありますか、それとも私はいつもそれをしなければなりませんか?

役に立ちましたか?

解決

それをする必要はまったくありません。それは、関数内のそれらに簡単にアクセスできるようにするためだけです。

self 変数は、jQuery関数でコールバックを使用している場合に役立ちます。 this あなたが行動している要素に設定されます。例えば:

$('.bacon').each(function(){ $(this).css('background', self.getBackground()); });

変数 oel タイピングを減らすだけです。バレイブルがある場合 self, 、または参照 this 変更されていない場合、アクセスできます optionselement オブジェクトから直接プロパティ。

他のヒント

オブジェクトリテラルを使用しているため、毎回これらのことを宣言する必要があります。オブジェクトを関数呼び出しとしてリテラルにラップし、そのようにしたいことを実現できます。

<script type="text/javascript">
function makeTheBacon() {
    var self = this;
    var o = self.options;
    var el = self.element;

    self._create = function() {...};
    self._bacon = function() {...};
    self._smokey = function() {...};
    return self;
}

(function ($) {
    $.widget("cb.bacon", makeTheBacon());
})(jQuery);
</script>

また、オブジェクトリテラルの関数を使用してこれに触れる質問もあります ここ, 、しかし、それはあなたの元の質問を考慮して過度に冗長に見えた。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top