javascript中的ES6 Set子类
Subclassing ES6 Set in javascript
我在尝试从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/
ES6的草案明确指出,应该可以对Set进行子类化,正确的方法是什么?
看起来这是被跟踪的:
https://github.com/google/traceur-compiler/issues/1413
目前没有正确的方法。Chrome/V8(和大多数其他浏览器一样)还不能正确地支持内建的子类化——部分原因是它的实现可能相当复杂,部分原因是精确的语义仍在不断变化,并且在最近的ES6会议上刚刚被推翻,目前还没有最终解决方案(截至2014年10月)。
在Chrome、Firefox和Edge(但不是IE11)中,您可以使用此解决方法将ES6子类Set and Map:
class MySet extends Set {
constructor() {
// instead of super(), you must write:
const self = new Set();
self.__proto__ = MySet.prototype;
return self;
}
// example method:
add(item) {
console.log('added!')
super.add(item); // Or: Set.prototype.add.call(this, item);
}
}
var mm = new MySet();
console.log(mm.size); // logs 0
mm.add(5); // logs 'added!'
console.log(mm.size); // logs 1
相关文章:
- 是否可以从父类访问子类的属性
- 子类访问父类's闭包变量
- Javascript关键字搜索子类Div值
- 如何通过Prototype或jquery移除子类的父类基类
- JavaScript数组的子类化破坏了快速枚举
- 可以“;超级“;可以在子类的方法内部使用,在不直接引用的情况下调用相应的超类方法
- 具有子类的构造函数中的Object.freeze
- JavaScript—父类和子类/对象的此问题
- Google Maps Javascript v3 自定义控件子类化标准控件
- 调用子类函数时调用的超类函数
- 在 Javascript 中更改 CSS 子类的值
- 子类化 Meteor.users() 以获得不同的用户类型
- 下划线扩展方法和结构.js子类
- 如何在 javascript 中从子类调用父方法
- 如何在单击父类的另一个子类时获取子类的值
- 寻址jquery ui手风琴子类
- hover添加类-或子类:悬停以影响父类
- Javascript 类继承.子类更改主类的属性
- 更改事件的DOM突变观测器回调和子类
- javascript中的ES6 Set子类