Boo*_*jaa 4 javascript ecmascript-6 arrow-functions
如何使用它的参考来区分ES6中的这三个东西?
let x = i => i+1;
class y { constructor(i) { this._i=i+1; } get i(){ return this._i;} }
function z(i) { return i+1; }
Run Code Online (Sandbox Code Playgroud)
例:
test(x) //=> 'arrow'
test(y) //=> 'class'
test(z) //=> 'function'
Run Code Online (Sandbox Code Playgroud)
我怎样才能在转录器中区分这些东西 - Traceur/Babel?
如何区分ES6中的这些东西?
.prototype属性.但是,方法也没有.他们继承自己Function.prototype.new,并且具有.prototype通常不为空的对象.如果使用extends关键字,则不会继承关键字Function.prototype..prototype就是通常是空的.他们继承自己Function.prototype..prototype继承自内部GeneratorPrototype对象的函数,并且它们从内部Generator对象继承.如你所见,有一些线索.但是,属性和继承总是可以搞乱,所以你不能真正信任它.函数是否是构造函数(可以调用new)无法从外部确定,您必须调用它并查看它是否抛出 - 这也可能是伪造的.
所以你最好的选择是Function.prototype.toString看看源的外观.如果您的ES实现支持.
我怎样才能在转录器中区分这些东西?
我认为任何转换器都不会实现没有原型的箭头和方法.类构造函数是否会被调用取决于转换的松散程度,但这并不是一种区分的好方法.
toString不起作用.