YUI3对象和命名空间与模块

时间:2012-09-28 16:52:17

标签: javascript yui3

我无法理解如何在YUI3中命名空间和实例化对象。在下面的示例中,我正在创建一个YUI3模块,将其加载到YUI.use方法中并尝试通过命名空间实例化我的对象。这不起作用,有人可以指出为什么?我在尝试实例化一个新对象时遇到错误:“对象不是函数”。

测试module.js

YUI.add('test-module', function(Y){ 
var TestModule = {
    url: '',        

    /* Example function */
    doExample: function(){          
        console.log("doExample called");        
        }
}
// expose this back to the Y object
Y.namespace('SANDBOX.Test').TestModule = TestModule;
}, 1.0, {requires:['node']});

的index.html

YUI({
    modules:{
        'test-module': {
            fullpath: 'js/test-module.js',
            requires: ['node']
        }
    }
}).use('test-module', function(Y){
    var testModule = new Y.SANDBOX.Test.TestModule(); //this throws the error
    testModule.doExample();
});

1 个答案:

答案 0 :(得分:3)

代码中的问题(你说它抛出异常)是你在普通对象上使用new()。这不是构造函数。

更改行

var testModule = new Y.SANDBOX.Test.TestModule(); //this throws the error

var testModule = Y.SANDBOX.Test.TestModule; //this doesn't throw the error

至于实例化对象,它与普通的Javascript没有区别:

var f = function(){
    //This is the constructor
}
f.prototype.myfunction = function(){
    //this is a function
}

您也可以使用他们的基础对象来创建自己的自定义对象。

var x = Y.Base.create('ClassIdentifier', |Base object to extend from|, [Extensions], {
    //content of the object, functions, etc
}, {
    ATTRS: {
        |attributes goes here|
    }
};
Y.namespace('mynamespcae').X = x;

然后你可以这样做:

var xInstance = new Y.mynamespace.X();

请参阅http://yuilibrary.com/yui/docs/base/或更具体的创建:http://yuilibrary.com/yui/docs/base/#create