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

您的代码当前无法正常工作有两个原因;

首先,您声明的 testFunction 函数将不可见。将代码更改为

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

修复那部分。传递给您的函数的 Y 将从 YUI.use() 返回,因此将其分配给 Y 使其可见。

第二个问题是对 obj.testFunction() 的调用将在 YUI 加载您需要的模块之前发生,因此此时 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 回答