gpt4 book ai didi

javascript - 如何扩展用 AMD 定义的 Javascript 模块?

转载 作者:数据小太阳 更新时间:2023-10-29 04:42:54 25 4
gpt4 key购买 nike

首先回顾一下历史,我们有一个由许多本质上是模块的 javascript 文件组成的引擎。这些模块返回分配给全局范围的单个类,尽管在指定的命名空间下。

引擎本身用于显示电子学习内容,每个不同的电子学习类(class)需要略有不同的需求,这是我们根据必要的功能将 javascript 文件包含到页面中的地方。 (只有一个入口页面)。

我一直在权衡是否值得更改为 AMD、require.js 和 r.js,或者是否最好继续使用我们当前的系统,该系统包括页面上所需的所有内容并将其最小化为一个脚本。

我去 AMD 的最大问题之一是似乎更难轻松地扩展类(class)。例如,有时我们必须稍微调整原始类的行为。因此,我们在页面上添加了另一个脚本 include,它通过复制原始原型(prototype)来扩展原始类,执行被 apply 覆盖的原始函数,然后执行任何需要的额外代码。

是否可以在不修改原始文件的情况下扩展 AMD 模块?还是我没有捕获要点,我们最好坚持目前正在做的事情?

最佳答案

我最近开始了一个使用 RequireJS 的项目,我用来扩展下划线的方法归结为如下:

相关目录结构:

  • /脚本
  • /scripts/underscore.js
  • /scripts/base/underscore.js

真正的下划线库在/scripts/base/underscore.js。

我的扩展在 /scripts/underscore.js 中。

/scripts/underscore.js 中的代码如下所示:

define(['./base/underscore'], function (_) {
'use strict';

var exports = {};

// add new underscore methods to exports

_.mixin(exports); // underscore's method for adding methods to itself

return _; // return the same object as returned from the underscore module
});

对于普通的扩展,它可能看起来更像这样:

define(['underscore', './base/SomeClass'], function (_, SomeClass) {
'use strict';

_.extend(SomeClass.prototype, {
someMethod: function (someValue) {
return this.somethingOrOther(someValue * 5);
}
});

return SomeClass;
});

关于下划线的注意事项:在其他地方,我使用 RequireJS shim-config 来获取下划线以作为 AMD 模块加载,但这应该不会影响非 shimed AMD 模块的这个过程。

关于javascript - 如何扩展用 AMD 定义的 Javascript 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com