我无法理解如何在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();
});
答案 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