Object.observe 退出和 RxJS 和 Angular 2

Posted

技术标签:

【中文标题】Object.observe 退出和 RxJS 和 Angular 2【英文标题】:Object.observe withdrawal and RxJS and Angular 2 【发布时间】:2016-02-11 06:54:04 【问题描述】:

我有点困惑,因为Obejct.observe is said to be withdrawn from the ES2016。

另一方面,talks on Angular Connect 提到他们将依赖它。

据我所知,Angular 2 并不直接依赖 Object.observe,而是依赖于使用 Object.observe 的 RxJS

能否请您帮助我了解此次退出的影响? 我也很困惑这将如何影响功能性反应式 javascript 开发。

对不起,如果这是个愚蠢的问题,但所有这些概念对我来说都是新的。

【问题讨论】:

Object.observeObservables 完全没有关系,名称可能会令人困惑,但它们甚至没有关系。 你不是唯一一个感到困惑的人,看到这个issue,你有一个核心团队成员的答案。 我认为 Angular 2 正在使用 Object.observe 和 polyfill docs.google.com/document/d/… 【参考方案1】:

RxJS 不依赖 Object.observe(而且 afaik 不打算在未来这样做),因为 RxJS 本身没有可观察对象的概念(尽管您可以创建具有可观察流作为值的对象)。

对于角度 Object.observe 本来是相关的,但我认为它还没有依赖它(或者至少不在 chrome 之外)。

无论如何,如果您需要可观察的对象,仍然可以使用 Mobservable 库,如blogpost 中所述。

【讨论】:

【参考方案2】:

仅供参考.... v4.1.0 在使用 Rx.Observable.ofObjectChanges(obj) 时确实对 Object.observe 有一些依赖...

在 chrome 中自己测试,现在已经删除了对 OO 的支持,如果你使用这种方法创建一个 observable,你会得到一个 OO 错误。

所以虽然是的,但在 RxJS 的上下文中,OO 与 Observables 无关,OO 在 4.1.0 中使用,这是当前稳定的,尚未在 5.XX 中实现(我猜延迟是由于切换到代理)。

所以如果你想使用流和 Rx 模式那么没问题,如果你想使用 RxJS 来观察一个对象,对不起,你将不得不 polyfill Proxy 并使用它,因为 ofObjectChanges 已损坏 ATM 以实现 Chrome 稳定。

【讨论】:

以上是关于Object.observe 退出和 RxJS 和 Angular 2的主要内容,如果未能解决你的问题,请参考以下文章

Object.observe

[ES7] Object.observe + Microtasks

AngularJS / rxjs:订阅时观察不到错误

解析 神奇的 Object.defineProperty

Vue双向绑定的关键:Object.defineProperty()

解析神奇的 Object.defineProperty