3

jQueryで変数にアクセスすることについて簡単な質問があります。'a'をクリックして読み取り関数を呼び出すときに変数(ラップ)にアクセスする方法はありますか?

(function() {
    var Example= {
        init: function() {
            var wrap = 'hello world';
            $('a').on('click', this.read);
        },

        read: function() {
            console.log(wrap)
        }
    };

    Example.init();
})();
4

6 に答える 6

3
(function() {
    var wrap;
    var Example= {
        init: function() {
            wrap = 'hello world';
            $('a').on('click', this.read);
    ...

関数は、定義スコープから見えるすべての変数にアクセスできるためです。

于 2012-04-14T00:59:03.173 に答える
3

これを実現する方法はいくつかあります。おそらく最も簡単なのは、「wrap」変数のスコープを変更することです。現在、init関数内でvarを使用して宣言されているため、スコープは関数内にあり、init外部ではinit直接使用できません。したがって、「wrap」をinit(「Example」オブジェクトのプロパティである可能性があります)の外側で宣言できます。

    var Example= {
        wrap: 'hello world',
        init: function() {
            var self = this;
            $('a').click(function(){
                self.read();
            });
        },

        read: function() {
            console.log(this.wrap);
        }
    };

    ​Exa​mple.init();

これにより、「wrap」のスコープが「Example」になり、「Example」内で定義されたすべての関数全体で「Example」のプロパティとして使用できるようになります。

(編集:クロージャーを適切に処理するには、これを少し調整する必要がありました。)

于 2012-04-14T01:03:06.933 に答える
0

公開モジュールパターンの使用を検討する場合は、次のように、どの変数をプライベートにし、どの変数をパブリックにするかを定義できます。

var Example = (function(){

    var wrap = 'hello world',
        init = function(){
            ...
        },
        read = function(){
            ... // You can use `wrap` here
        };

    return { // Return public variables and methods
        init: init,
        read: read
    };

})();

Example.init();
于 2012-04-14T01:11:06.227 に答える
0
(function() {
    var Example= {
        init: function() {
            this.wrap = 'hello world';
            $('a').on('click', this.read);
        },
        read: function() {
            console.log(this.wrap)
        }
    };
    Example.init();
})();
于 2012-04-14T01:06:37.930 に答える
0

これを試してください:(フィドル:http://jsfiddle.net/jRJFQ/3/

(function(){
    var Example= {
        wrap:null,
         init: function() {
            this.wrap = 'hello world';
            $('a').on('click', this.read);
         },

        read: function() {
            console.log(Example.wrap)
        }
    };
    Example.init();
}​)();​
于 2012-04-14T01:08:23.963 に答える
-1

うん、これはそれを行う必要があります:

(function() {
    var wrap;
    var Example= {
        init: function() {
            var wrap = 'hello world';
            $('a').on('click', this.read);
        },

        read: function() {
            console.log(wrap)
        }
    };

    Example.init();
})();
于 2012-04-14T00:59:05.843 に答える