0

以下のスニペットでは、testFunction()YUI ブロック内にあるものにアクセスしようとしています。それを行う正しい方法は何ですか?

var obj = YUI().use('node', 'event', 'io-base', 'json-parse', function(Y){
    function testFunction() {
        console.log('Inside Function');
    }
});

obj.testFunction();
4

1 に答える 1

1

あなたのコードは現在、2 つの理由で機能していません。

まず、宣言している testFunction 関数は表示されません。コードを次のように変更します

var obj = YUI().use('node', 'event', 'io-base', 'json-parse', function(Y){
    Y.testFunction = function() {
        console.log('Inside Function');
    }
});

その部分を修正します。関数に渡された Y は YUI.use() から返されるため、Y に割り当てると可視になります。

2 つ目の問題は、YUI が必要なモジュールをロードする前に obj.testFunction() の呼び出しが発生するため、その時点で obj (YUI のインスタンス) に testFunction が含まれていないことです。上記のコードを変更すると、ブラウザー コンソールで obj.testFunction() を呼び出すことができるようになります。これは、その時点で読み込まれているためです。

最善の策は、testFunction をモジュールに配置し、そのモジュールを後のコードで使用することです。

YUI.add('testFunction', function (Y) {
   Y.testFunction = function() {
        console.log('Inside Function');
    };
}, '1.0.0', {
    requires: ['node', 'event', 'io-base', 'json-parse']
});

var obj = YUI().use('testFunction', function(Y){
      Y.testFunction();
});

http://jsfiddle.net/u2XPA/

于 2013-11-13T10:59:11.890 に答える