在 javascript 中创建一个全局库,同时保存状态和行为
Create a global library in javascript, holding both state and behaviour
我想用Javascript创建一个全局可访问的库myLib。我的库应执行以下操作
-
保留一个有点持久的变量 myLib.tax。
- 它应该通过处理典型的浏览器用户事件来生存,至少在简单的情况下是这样。我不在乎它是否能存活更长的时间。
-- 外部代码应该能够通过 setter 或其他方式设置此变量的值。
-
有一个函数myLib.applyTax(var price(。
-- 返回值是 price + myLib.tax。
-我不在乎如果价格或税收不是一个数字,它会做什么。
-
最后,一个简短的示例,说明如何从另一个文件调用它,方式如下:
-- 例如,文件 A 可能会设置税款的值,然后文件 B 可能会应用。
-- 即使文件 A 和 B 不相关,这也有效。
这个问题的目的是让我了解代码和状态封装以及如何从其他地方使用它们。
编辑:为了以后看到这个的人的利益,我在问这个问题时不明白的是,从javascript文件A.js引用到javascript文件B.js是一个难题,除非在外部启用,例如在html中。有关更多详细信息,请参阅如何在另一个 JavaScript 文件中包含 JavaScript 文件?
从您的评论中,我看到您将通过静态方法和数据在 C# 中实现单例模式。
在Javascript中,你可以通过管理闭包并将这些数据放入最外层的数据来做同样的事情,然后由于词法范围,所有代码都可以访问这些数据。
但我宁愿每天避免单身人士。相反,请使用依赖关系注入,如下所示。这只是展示该技术的示例,您必须自己编写实际解决方案。
var lex = (function () {
var privatedata;
function privatemethod()
{
}
return {
publicmethod1: function (arg1, arg2) { ... },
publicmethod2: function (arg1, arg2) { ... },
getPublicData: function () { ... }
};
}());
然后将此封装对象注入到您需要的任何位置:
function consumerCode(lexicon)
{
...
}
consumerCode(lex); // injects the lex instance into the consumer code
通过只有一个实例并将相同的实例传递到您需要它的任何位置,您将拥有您所要求的几乎。这种技术不仅限于Javascript,而且在C#中也很有用。但是在松散类型的Javascript中,它特别强大。
- 如何在浏览器重新加载时保存位置哈希状态
- ReactJS:使用浏览器按钮导航时保存状态
- Extjs 4在父窗口关闭时保存checkboxGroup的状态
- d3.js保存状态
- 具有闭合功能的 For 循环保存状态
- Angular ui路由器,通过url/url变量保存状态
- jqTree 在 IE11 中不执行保存状态工作正常 FF12.
- 在 javascript 中创建一个全局库,同时保存状态和行为
- 保存状态单选按钮javascript html
- Rhino:能够暂停、保存状态和恢复javascript
- 在这个手风琴菜单上实现保存状态功能
- 使用Javascript更改类的宽度并保存状态
- 刷新后如何保存状态我的按钮
- 页面重新加载后菜单的保存状态
- 在实现cookie保存状态到JQuery切换时遇到麻烦
- 使用javascript和jquery保存状态
- 在页面重新加载后,从本地存储检索复选框集合的已保存状态
- 是JavaScript test()在正则表达式中的保存状态
- 当html页面发生更改时,变量处于点击/保存状态时,会执行许多操作
- Angular UI Bootstrap:设置accordion保存状态