Rik*_*ood 1 javascript programming-languages
Javascript是一种令人难以置信的语言,像jQuery这样的库使得它几乎太容易使用了.
Javascript的原始设计者应该包含哪些语言,或者我们应该向他们施加什么压力才能添加到未来的版本中?
我想看到的事情: -
我不是Javascript的专家,所以也许这些已经存在,但还有什么呢?您是否希望看到其他编程语言的杀手级功能?
我一直渴望和痛苦的一件事是对哈希的一些支持.具体来说,让我跟踪有关对象的元数据,而无需在该对象上添加expando属性.
Java提供Object.getHashCode()默认情况下使用底层内存地址; Python提供id(obj)了获取内存地址并可hash(obj)自定义的内容; Javascript也没有提供任何内容.
例如,我正在编写一个Javascript库,试图不引人注意地优雅地增强你给我的一些对象(例如你的<li>元素,甚至是与DOM无关的东西).假设我需要处理每个对象一次.所以在我处理完每个对象之后,我需要一种方法来"标记它".
理想情况下,我可以创建自己的哈希表或设置(以任何方式,实现为字典)来跟踪:
var processed = {};
function process(obj) {
var key = obj.getHashCode();
if (processed[key]) {
return; // already seen
}
// process the object...
processed[key] = true;
}
Run Code Online (Sandbox Code Playgroud)
但由于这不是一个选项,我不得不求助于在每个对象上添加一个属性:
var SEEN_PROP = "__seen__";
function process(obj) {
if (obj[SEEN_PROP]) { // or simply obj.__seen__
return; // already seen
}
// process the object...
obj[SEEN_PROP] = true; // or obj.__seen__ = true
}
Run Code Online (Sandbox Code Playgroud)
但这些对象不是我的,所以这使我的脚本突兀.该技术实际上是一个黑客,以解决我无法获得任何任意对象的可靠哈希键的事实.
另一种解决方法是为所有内容创建包装器对象,但通常需要一种从原始对象到包装器对象的方法,这需要原始对象上的expando属性.另外,如果原始对象是DOM元素,那么会创建一个循环引用,导致IE中的内存泄漏,因此这不是一种安全的跨浏览器技术.
对于Javascript库的开发人员,这是一个反复出现的问题.
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |