访问嵌套在YUI代码块中的函数

时间:2013-11-13 10:36:17

标签: javascript closures yui

在下面的代码段中,我正在尝试访问YUI块内的testFunction()。 这样做的正确方法是什么?

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

obj.testFunction();

1 个答案:

答案 0 :(得分: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/