我现在使用 Traceur Compiler 来利用 ES6 功能。
我想从 ES5 实现这些东西:
function Animal() {
var self = this,
sayHi;
sayHi = function() {
self.hi();
};
this.hi = function() {/* ... */}
}
目前traceur不支持private
and public
关键词(来自和谐 http://wiki.ecmascript.org/doku.php?id=harmony:classes)。并且ES6类语法不允许使用简单的var
(or let
) 类主体中的语句。
我发现的唯一方法是在类声明之前模拟私有。就像是:
var sayHi = function() {
// ... do stuff
};
class Animal {
...
总比什么都没有好,但正如预期的那样,你无法通过正确的考试this
到私有方法没有apply
-ing or bind
- 每次都这样。
那么,是否有可能在与traceur编译器兼容的ES6类中使用私有数据?
没有private
, public
or protected
当前关键词ECMAScript 6 规范 https://people.mozilla.org/~jorendorff/es6-draft.html.
所以Traceur不支持private
and public
。 6to5(目前称为“Babel”)实现这个提议 https://github.com/zenparsing/es-abstract-refs用于实验目的(另见这次讨论 https://esdiscuss.org/topic/proposal-abstract-references)。但这毕竟只是提议。
所以现在你可以通过模拟私有属性WeakMap
(see here https://curiosity-driven.org/private-properties-in-javascript)。另一种选择是Symbol
- 但它不提供实际的隐私,因为可以通过以下方式轻松访问该财产Object.getOwnPropertySymbols
.
恕我直言,目前最好的解决方案是使用伪隐私。如果您经常使用apply
or call
用你的方法,那么这个方法是非常特定于对象的。因此,值得在类中使用下划线前缀来声明它:
class Animal {
_sayHi() {
// do stuff
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)