在我重新进入JavaScript(和相关)之前,我已经完成了很多ActionScript 3,并且他们有一个Dictionary对象,它具有弱键,就像即将发布的WeakMap一样; 但AS3版本仍然像常规通用对象一样可枚举,而WeakMap特别没有.keys()或.values().
AS3版本允许我们安装一些非常有趣和有用的构造,但我觉得JS版本有些限制.这是为什么?
如果Flash VM可以做到这一点,那么是什么阻止浏览器做同样的事情呢?我读到了它是如何"非确定性"的,但这有点恰到好处?
在C++中,我可以显式定义构造函数和析构函数,然后在构造函数/析构函数中使用cout <<"C或D Called"来确切知道在哪里.
但是在JavaScript中如何知道对象何时被破坏.以下示例是关注我的案例.
我在超时时调用内部函数,我想知道只要定时器正在运行,对象就会保持活动状态,等待再次调用next.
用户点击呼叫控制
// Calls Control
Run Code Online (Sandbox Code Playgroud)
控制呼叫消息
var message_object = new Message( response_element );
Run Code Online (Sandbox Code Playgroud)
消息调用效果
new Effects().fade( this.element, 'down', 4000 );
message_object.display( 'empty' );
Run Code Online (Sandbox Code Playgroud)
效果
/**
*Effects - build out as needed
* element - holds the element to fade
* direction - determines which way to fade the element
* max_time - length of the fade
*/
var Effects = function( )
{
this.fade = function( element, direction, max_time )
{
element.elapsed = 0;
clearTimeout( element.timeout_id …Run Code Online (Sandbox Code Playgroud) 假设我有一些asm.js代码,可能是由emscripten创建的.假设它有一些相当大的堆分配结构,它由asm.js函数返回,作为一个指针,由一些JavaScript库拾取,包装在一个漂亮的JavaScript对象中.好到目前为止.
但是,如果该对象超出范围并被垃圾收集,会发生什么.现在,asm.js代码无法知道这一点,因此结构的内存将保持分配状态,从而导致内存泄漏.
有没有办法从JavaScript中向JavaScript对象添加终结器?
这样的终结器可用于释放asm.js中的内存,从而避免内存泄漏.到目前为止,我找不到一个记录在案的便携式方法来实现这一点,但也许我一直在寻找错误的地方.
我想在JS中缓存大对象.这些对象是按键检索的,缓存它们是有意义的.但它们不会同时适合内存,所以我希望它们在需要时进行垃圾收集 - GC显然知道更好.
使用其他语言中的WeakReference或WeakValueDictionary来创建这样的缓存是非常简单的,但是在ES6中我们有WeakMap,而密钥很弱.
那么,是否有可能制作类似于WeakReference或制作垃圾收集的缓存WeakMap?
javascript caching garbage-collection ecmascript-harmony ecmascript-6
我的问题是" javascript中是否可以阻止失效的侦听器问题?" 但显然"问题"这个词会导致问题.
维基百科页面说,失败的监听器问题可以通过持有对观察者的弱引用的主题来解决.我之前在Java中已经实现了它并且它运行良好,我认为我将在Javascript中实现它,但现在我不知道如何.javascript甚至有弱引用吗?我看到有WeakSet和WeakMap具有在其名称中的"弱",但他们似乎并没有被这个有帮助,据我所看到的.
这是一个jsfiddle,显示了问题的典型案例.
html:
<div id="theCurrentValueDiv">current value: false</div>
<button id="thePlusButton">+</button>
Run Code Online (Sandbox Code Playgroud)
javascript:
'use strict';
console.log("starting");
let createListenableValue = function(initialValue) {
let value = initialValue;
let listeners = [];
return {
// Get the current value.
get: function() {
return value;
},
// Set the value to newValue, and call listener()
// for each listener that has been added using addListener().
set: function(newValue) {
value = newValue;
for (let listener …Run Code Online (Sandbox Code Playgroud) javascript dom garbage-collection weak-references observer-pattern
如何在 ES6 中使弱集或弱映射“可迭代”,以便我可以在循环中使用:
for(item in weakMap){console.log(item); }
Run Code Online (Sandbox Code Playgroud) Javascript 现在有名为WeakMap和 的类WeakSet,其中的键是弱引用的。
为什么这些实例不能被迭代,即使用WeakMap#entires?
注意:这不是重复的问题。另一个问“如何”,这个问“为什么”。
javascript ×7
ecmascript-6 ×4
asm.js ×1
caching ×1
dom ×1
enumerable ×1
finalizer ×1
weakmap ×1