相关疑难解决方法(0)

为什么ES6 WeakMap不可枚举?

在我重新进入JavaScript(和相关)之前,我已经完成了很多ActionScript 3,并且他们有一个Dictionary对象,它具有弱键,就像即将发布的WeakMap一样; 但AS3版本仍然像常规通用对象一样可枚举,而WeakMap特别没有.keys().values().

AS3版本允许我们安装一些非常有趣和有用的构造,但我觉得JS版本有些限制.这是为什么?

如果Flash VM可以做到这一点,那么是什么阻止浏览器做同样的事情呢?我读到了它是如何"非确定性"的,但这有点恰到好处?

javascript enumerable weakmap ecmascript-6

27
推荐指数
1
解决办法
2050
查看次数

什么时候JavaScript对象被破坏?

在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)

javascript

25
推荐指数
2
解决办法
2万
查看次数

JavaScript对象的终结器

假设我有一些asm.js代码,可能是由emscripten创建的.假设它有一些相当大的堆分配结构,它由asm.js函数返回,作为一个指针,由一些JavaScript库拾取,包装在一个漂亮的JavaScript对象中.好到目前为止.

但是,如果该对象超出范围并被垃圾收集,会发生什么.现在,asm.js代码无法知道这一点,因此结构的内存将保持分配状态,从而导致内存泄漏.

有没有办法从JavaScript中向JavaScript对象添加终结器?

这样的终结器可用于释放asm.js中的内存,从而避免内存泄漏.到目前为止,我找不到一个记录在案的便携式方法来实现这一点,但也许我一直在寻找错误的地方.

javascript memory-management finalizer asm.js

11
推荐指数
1
解决办法
3711
查看次数

垃圾收集缓存通过Javascript WeakMaps

我想在JS中缓存大对象.这些对象是按键检索的,缓存它们是有意义的.但它们不会同时适合内存,所以我希望它们在需要时进行垃圾收集 - GC显然知道更好.

使用其他语言中的WeakReference或WeakValueDictionary来创建这样的缓存是非常简单的,但是在ES6中我们有WeakMap,而密钥很弱.

那么,是否有可能制作类似于WeakReference或制作垃圾收集的缓存WeakMap

javascript caching garbage-collection ecmascript-harmony ecmascript-6

11
推荐指数
2
解决办法
1337
查看次数

在javascript中可以阻止已失效的侦听器吗?

我的问题是" javascript中是否可以阻止失效的侦听器问题?" 但显然"问题"这个词会导致问题.

维基百科页面说,失败的监听器问题可以通过持有对观察者的弱引用的主题来解决.我之前在Java中已经实现了它并且它运行良好,我认为我将在Javascript中实现它,但现在我不知道如何.javascript甚至有弱引用吗?我看到有WeakSetWeakMap具有在其名称中的"弱",但他们似乎并没有被这个有帮助,据我所看到的.

这是一个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

5
推荐指数
1
解决办法
268
查看次数

如何在 ES6 中使弱集或弱映射可迭代?

如何在 ES6 中使弱集或弱映射“可迭代”,以便我可以在循环中使用:

for(item in weakMap){console.log(item); }
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

4
推荐指数
1
解决办法
6585
查看次数

为什么 WeakMap 不可互用?

Javascript 现在有名为WeakMap和 的类WeakSet,其中的键是弱引用的。

为什么这些实例不能被迭代,即使用WeakMap#entires

注意:这不是重复的问题。另一个问“如何”,这个问“为什么”。

javascript ecmascript-6

3
推荐指数
1
解决办法
1348
查看次数