哪些浏览器支持Object.observe?我很惊讶我无法找到任何关于此的信息.
(您是否了解此功能的预计到达时间?)
关于Object.observe:"Object.observe允许直接观察对ECMAScript对象的更改.它允许观察者接收按时间排序的更改记录序列,这些记录描述发生在观察对象集合中的一组更改. " - 请参阅ecmascript.org,解决方案部分.)
编辑 2015年11月:显然Object.observe已被取消:
http://www.infoq.com/news/2015/11/object-observe-withdrawn
https://esdiscuss.org/topic/an-update-on-object-observe
"我打算从TC39撤回Object.observe提案"
https://esdiscuss.org/topic/save-object-observe-please-make-weakmap-weakset-observable
"保存Object.observe()!(请)"
所述Object.observe()的JavaScript API允许任何一段代码以接收改变通知任何JavaScript对象的所有属性的变化.
这是否会严重影响JavaScript引擎(即V8)可以执行的代码生成和性能优化?如果必须生成更改通知,现在生成的本机代码似乎必须检查对象的每次写入.无法静态确定给定对象是否设置了通知.因此检查无法优化.
似乎任何符合要求的JavaScript引擎现在都因此API而导致性能永久严重损失.
我有这个功能在Chrome中工作,当一个名为finishedLoading的变量改变值时,它会打印到控制台.
Object.observe(finishedLoading, function(id, oldval, newval) {
console.log('finished loading' + id + ' went from ' + oldval + ' to ' + newval);
}
Run Code Online (Sandbox Code Playgroud)
这在一堆其他现代浏览器中不起作用(例如firefox,safari).有没有我可以使用的替代方案可以更好地支持?谢谢!
我有点困惑,因为据说Obejct.observe已退出ES2016.
另一方面,有关Angular Connect的讨论提到他们会依赖它.
所以到目前为止我理解Angular 2不直接依赖于Object.observe,而是依赖于使用Object.observe的RxJS
你能帮我理解这次退出的影响吗?我也很困惑这将如何影响功能性反应性JavaScript开发.
对不起,如果这是一个愚蠢的问题,但所有这些概念对我来说都是新的.
现在,Angular在几千个物体之后减速,这阻止我们构建像电子表格或Conway的生命游戏之类的东西.
一旦实现了Object.observe(在遥远的未来),Angular可以实现这些吗?或者DOM操纵会成为阻塞点吗?
现在Object.observe()是在默认情况下在Chrome中,我遇到了一堆的情况下,我想重复使用内置的属性(浏览器的hidden,title,draggable),但*Changed观察家不再被调用的属性发生变化时.
一个例子是hidden:http://jsbin.com/jizikaje/1/edit(hiddenChanged()永远不会被调用)
我目前的解决方法是使用attributeChanged()观察属性更改:
attributeChanged: function(attrName, oldVal, newVal) {
// Cannot use *Changed watchers for these native properties.
if (attrName == 'hidden') {
this.marker.setVisible(!this.hidden);
}
}
Run Code Online (Sandbox Code Playgroud)
推荐的方法是什么?
BTW,在尝试使用本机属性时发出警告将需要很长时间进行调试:https://github.com/Polymer/polymer/issues/379
就像标题所说的那样.有没有办法在不触发Polymer中的观察者回调的情况下修改观察值?
例如
Polymer({
is: 'my-component',
properties: {
aValue: {
type: Number,
value: 0,
observer: '_valueChanged',
notify: true
},
ref: {
type: Object,
computed: '_computeRef(channel, channelNumber)'
}
},
_computeRef: function(channel, channelNumber) {
var ref = new Firebase("/*link*/");
ref.on("child_changed", function(data) {
this.aValue.setWithoutCallingObserver(data.val());
}.bind(this));
return ref;
},
_valueChanged: function() {
var message = { aValue: this.aValue };
if (this.ref) {
this.ref.set(message);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这将是有用的,因为现在我遇到以下情况中的滞后:
aValue第三方应用程序更新:问题与firebase无关.我相信解决方案是控制如何将更新应用于Polymer中的观察值.部分原因是对firebase商店中的值的更改也可以由第3方(不一定是Web)应用程序进行.
在对象上有一个活动的Object.observe是否会阻止它被垃圾回收?您是否需要先调用Object.unobserve以允许它被垃圾回收?或者GCing一个对象是否删除了所有活动的观察者?
javascript garbage-collection ecmascript-harmony object.observe
看看对象内部的新观察ES6特征,我想知道Ember和ES6是等价还是不同?我们可以安全地使用Watchjs polyfill with ember吗?
我在最新版本的Chrome中使用Object.observe,并想知道为什么它不能用于文本输入的'value'属性.下面的代码将记录添加/更改'foo'属性的更改,但不会更改value属性.谁知道为什么?
var myTextInput = document.getElementById('myTextInput');
Object.observe(myTextInput, function(changes){
changes.forEach(function(change) {
console.log(change);
});
});
myTextInput.value = 'test123';
myTextInput.foo = 'bar';
Run Code Online (Sandbox Code Playgroud) object.observe ×10
javascript ×7
polymer ×2
angular ×1
angularjs ×1
browser ×1
ember.js ×1
frp ×1
observable ×1
performance ×1
rxjs ×1