我正在学习es6所以我试图将这些代码从es5转换为es6。
我知道如何在es5中创建一个实例计数器。构建在id
上的A.prototype
和基于counter
的{{1}} A
。当我按A
构建实例时,它会触发counter++
来设置id
。因此,它实现了inheritance counter
的行动。
var A = (function () {
function A() {
this.id = ++A.counter;
console.log(this.id);
}
A.counter = 0;
return A;
}());
a = new A(); // 1
b = new A(); // 2
c = new A(); // 3
如果我在es6工作,我该如何实现相同的功能?
答案 0 :(得分:6)
其他两个答案完全正确。但如果你想获得超级疯狂的ES6,那么你可以为这些房产制造吸气剂。
d = {30:3, 54:5, 16:2}
r = d
for k,v in d.items():
biggest = max(d,key = d.get)
del(r[biggest])
这样你的计数器和id都是只读的,你的计数器每次访问时都会自动递增...而且它在类定义中都是整齐的,而不需要超出它。
不是说你需要这样做......但似乎你正在学习ES6,这个例子展示了一些关于你可以用它做什么的巧妙技巧。
答案 1 :(得分:3)
您完全按照与ES5相同的方式执行此操作:
[409] "@astramotor Honda All New CB150R Quantum Red #CumadiASTRAMOTOR #ASMOQuiz *21"
[410] "@astramotor Honda All New CB150R Quantum Red #CumadiASTRAMOTOR #ASMOQuiz *20"
[411] "@astramotor Honda All New CB150R Quantum Red #CumadiASTRAMOTOR #ASMOQuiz *19"
[412] "@astramotor Honda All New CB150R Quantum Red #CumadiASTRAMOTOR #ASMOQuiz *18"
[413] "@astramotor Honda All New CB150R Quantum Red #CumadiASTRAMOTOR #ASMOQuiz *17"
(如果需要,您也可以添加相同的不必要的IIFE)
答案 2 :(得分:3)
es6 class
可以完成你想要的。
id
不是基于A.prototype
构建的,而是基于每个A实例。 constructor
是做一个实例。所以你可以看一下,当A类构建一个新实例时它会this.id = ++A.counter
。
class A {
constructor(){
this.id = ++A.counter;
console.log(this.id)
}
}
A.counter = 0;
a = new A()
b = new A()
c = new A()
答案 3 :(得分:1)
这是一个解决方案,也像BryanGrezeszak的answer一样,也完全包含在ES6类中,但是在某些情况下可能会有用:
SaveFile
此代码的区别在于,继承的类具有自己的独立计数器。
如果您不想向构造函数添加属性,则可以替换
LoadFile
使用
class A {
constructor() {
this.constructor.counter = (this.constructor.counter || 0) + 1;
this._id = this.constructor.counter;
console.log(this.id);
}
get id() {
return this._id;
}
}
class B extends A {}
class C extends A {}
a = new B(); // <- 1
b = new C(); // <- 1
c = new B(); // <- 2
d = new A(); // <- 1
这是表达不赞成使用的当前方式
this.constructor.counter
那样,Object.getPrototypeOf(this).counter
将是该类的静态属性,而不是(静态函数)this.__proto__.counter
的属性。