相关疑难解决方法(0)

如何有效地计算JavaScript中对象的键/属性数?

计算对象的键/属性数的最快方法是什么?它可以在不迭代对象的情况下完成此操作吗?即没有做

var count = 0;
for (k in myobj) if (myobj.hasOwnProperty(k)) count++;
Run Code Online (Sandbox Code Playgroud)

(Firefox确实提供了一个神奇的__count__属性,但是在版本4的某个地方删除了它.)

javascript performance properties key count

1452
推荐指数
14
解决办法
62万
查看次数

听取JavaScript中的变量更改

是否有可能在JS中有一个事件,当某个变量的值发生变化时会触发该事件?JQuery被接受了.

javascript jquery dom-events

422
推荐指数
12
解决办法
30万
查看次数

所有浏览器的Object.watch()?

请务必阅读以下所有评论.不推荐使用Object.Watch和Object.Observe.请参阅Elliot B对更新(截至2018年6月)方法的评论.


我一直在寻找一种简单的方法来监控对象或变量的变化,我发现Object.Watch,Mozilla浏览器支持这种方式,但IE不支持.所以我开始四处寻找,看是否有人写过某种等价物.

关于我发现的唯一一件事是jQuery插件,但我不确定这是不是最好的方法.我当然在大多数项目中都使用jQuery,所以我并不担心jQuery方面......

无论如何,问题是:有人能告诉我一个jQuery插件的工作示例吗?我有问题让它工作......

或者,是否有人知道任何可以跨浏览器工作的更好的替代品?

答案后更新:

谢谢大家的回复!我试过这里发布的代码:http: //webreflection.blogspot.com/2009/01/internet-explorer-object-watch.html

但我似乎无法使其与IE一起工作.下面的代码在Firefox中运行良好,但在IE中没有任何作用.在Firefox中,每次Object.Observe更改Object.watch()watcher.status都会调用in ,您可以在页面上看到输出.在IE中,这不会发生,但我可以看到document.write()更新值,因为最后一次watcher.watch()调用显示正确的值(在IE和FF中).但是,如果没有调用回调函数,那那就毫无意义...... :)

我错过了什么吗?

var options = {'status': 'no status'},
watcher = createWatcher(options);

watcher.watch("status", function(prop, oldValue, newValue) {
  document.write("old: " + oldValue + ", new: " + newValue + "<br>");
  return newValue;
});

watcher.status = 'asdf';
watcher.status = '1234';

document.write(watcher.status + "<br>");
Run Code Online (Sandbox Code Playgroud)

javascript jquery dom-events

116
推荐指数
5
解决办法
9万
查看次数

检测Javascript对象中的更改

我找到了这个要点来检测对象的指定fiels的变化:https://gist.github.com/3138469

但它只在一个字段上绑定一个事件.

有人知道一个函数或技巧来检测整个Javascript对象的变化吗?

javascript events object watch detect

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

动态的吸气剂和二传手 - 一种可能性

我正在努力解决最近出现的问题.假设我们想要并且知道如何在javascript中使用动态getter和setter,更像是php(__ get,__ set)中的那些.但是由于javascript没有全能属性,我们唯一能做的就是提供一个可能的键列表,并迭代只在那些上添加getter和setter,并希望别人都不会来.

但问题到目前为止尚未解决.这样就使我想起了另一个方法是使用一个讨厌的黑客与trycatch,因此只要有一个名字会在一个对象是不确定的使用catch是获取(至少),然后恢复代码,硬,也许毫无意义的事做.但是从这里出现了我的第二个问题,在这样的用途:

console.log(g.someundefinedproperty); 
Run Code Online (Sandbox Code Playgroud)

结果将是一个console.log显示的调用undefined,没有异常被抛出.然后它来找我:如果我会使用原始的window.undefinedgetter和setter,毕竟每次我搞砸并拼错一个单词或什么时都必须调用它.

所以我试过了

Object.defineProperty(window, 'undefined', {
    get : function ()
    {
         // functional code, including getting the caller and figuring out
         // where we are, and what we have to do... easy :D

         console.log('works');
    },
    set : function ()
    {
         // some couple more fine hacks here
         console.log('this too');
    }
});
Run Code Online (Sandbox Code Playgroud)

但不幸的undefined是窗口的属性是configurable : false.尝试的其他黑客正在克隆window除了undefined内部window属性之外的对象.并在新的对象上定义新的 …

javascript metaprogramming undefined getter-setter

6
推荐指数
1
解决办法
1863
查看次数