1

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

测试模块.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']});

索引.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();
});
4

1 回答 1

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

于 2012-09-28T17:46:08.597 回答