Jam*_*ice 3 javascript yui yui3
在YUI3中是否可以覆盖例如Node模块的方法?例如,我想做这样的事情:
Y.Node.prototype.get = function () {
// Do some stuff then call the original function
};
Run Code Online (Sandbox Code Playgroud)
这是完美的(正如您所期望的)什么时候Y是我认为是由库创建的全局可用的YUI实例.使用模块加载器并传递回调时,它不起作用:
YUI().use("*", function (DifferentY) {
DifferentY.Node.prototype.get === Y.Node.prototype.get; // false
});
Run Code Online (Sandbox Code Playgroud)
我花了一些时间挖掘YUI源代码,但到目前为止还没有弄清楚在DifferentY前面的例子中创建的位置和方式(以及扩展,DifferentY.Node创建的位置).
我之前从未使用过YUI,所以我可能会以完全错误的方式解决这个问题.
好的如果我看一下这个例子似乎对Y有误解.在YUI3中,每个东西都是沙箱,所以你可以同时运行多个YUI实例.Y不是全局变量,它将在您调用YUI().use方法时实例化,并且仅存在于该函数内.这就是为什么在SO的代码中只存在DifferentY,而不是Y.
YUI().use('node', 'event', function (Y) {
// The Node and Event modules are loaded and ready to use.
// Y exists in here...
});
Run Code Online (Sandbox Code Playgroud)
因此,如果你想"从外部"增强YUI,我将建立在YUI的模块策略上并使用YUI.add()创建一个YUI模块
if (YUI) {
YUI.add('node-enhancement', function (Y) {
Y.Node.prototype.get = function () {
// Do some stuff then call the original function
};
}, '0.0.1', {
requires: [Node]
});
}
Run Code Online (Sandbox Code Playgroud)
并让开发人员将增强功能加载为模块(无论如何,他将如何使用yui3)
YUI().use('node-enhancement'), function(Y) {
// just use YUI as allways
});
Run Code Online (Sandbox Code Playgroud)
有关全局YUI对象如何工作的解释,此概述可能会有所帮助:http://yuilibrary.com/yui/docs/yui/