【发布时间】:2012-03-27 22:53:26
【问题描述】:
我想评论this old question,但它似乎被锁定了。
这是我的用例:
- 使用构造函数
Base创建对象obj。obj instanceof Base返回 true。 - 我想更改
obj的原型,使其看起来好像obj是从Derived构造的。也就是说,我要-
obj访问Derived的方法 -
obj instanceof Derived返回真
-
原因是obj 在层次结构中有一个类型,该类型在创建时是未知的,并由之后发生的事情决定。我希望能够将其向下移动。
我相信我可以做到这一点
obj.__proto__ = Derived.prototype;
但 __proto__ 将在 JavaScript 的下一版本中被弃用。 proxies API,自从我上面链接的问题被问到之后发生了变化,似乎不支持我的用例。
对于我的用例,现在存在或计划在未来有替代实现吗?
我现在能看到的唯一选择是使用
obj2 = Object.create(Derived.prototype);
obj2.extend(obj);
并且永远不要存储多个对 obj 的引用,但这样的代价是相当不便的。
这是一个 fiddle 演示问题。
【问题讨论】:
-
__proto__是 already deprecated。对象的[[Prototype]]只能在构造的时候修改,之后不能修改链。 -
好的......但它仍然在我的环境中可用。我正在寻找更便携的解决方案。你能帮忙吗?
-
不推荐使用的东西不会从系统中删除,它基本上被标记为将来删除,因此不应使用。维护支持以便有时间修改使用已弃用功能的代码。
-
是的,提这个有什么意义?我已经提到我目前依赖非便携式行为并且正在寻找替代方案。您的评论对讨论没有任何贡献。
-
好的,您似乎很惊讶地发现一个已弃用的功能仍然可用,只是想我会解释一下。
标签: javascript ecmascript-5 ecmascript-harmony