【发布时间】:2014-10-08 11:26:35
【问题描述】:
我在尝试从 ecmascript 6 中可用的新 Set 继承时遇到问题。该类的定义如下:
function SelectionManager () {
Set.call(this);
}
SelectionManager.prototype = Object.create(Set.prototype);
SelectionManager.prototype.add = function (unit) {
unit.setIsSelected(true);
Set.prototype.add.call(this, unit);
};
/* Some functions left out */
尝试调用add 时出现以下错误:TypeError: Set operation called on non-Set object
代码可在http://jsfiddle.net/6nq1gqx7/获取
draft for ES6 明确指出应该可以继承 Set,这样做的正确方法是什么?
【问题讨论】:
-
Uncaught ReferenceError: Set is not defined。 Chrome(37)似乎对 ES6 不太满意 -
嗯,似乎它在 Chrome 38 中可用。在 Chrome 31 中启用了
Enable Experimental JavaScript标志... Chrome 38 昨天升级为稳定版,它应该会在附近自动更新未来。 -
啊,是的,看来浏览器只是在等待重启,更新已经下载:P
-
阅读"How ECMAScript 5 still does not allow to subclass array" 提供了一种解决方法,但他们描述的问题不应该真正适用于
Set,特别是因为规范说它应该是可子类化的。解决方法是将构造函数更改为var set = new Set();、set.__proto__ = SelectionManager.prototype;、return set;,虽然看起来很脏……
标签: javascript set ecmascript-6 ecmascript-harmony