[英]Define class method property with ES6 syntax
在 ES5 语法中,一个类Foo
带有一个带有属性flag
的方法bar
,可以像这样定义:
function Foo() {};
Foo.prototype.bar = function() { console.log('bar invoked'); };
Foo.prototype.bar.flag = true;
我可以混合 ES5 和 ES6 语法并执行以下操作:
class Foo {
bar() {
console.log('bar invoked');
};
};
Foo.prototype.bar.flag = true;
或者只使用 ES6 语法:
class Foo {
bar() {
this.bar.flag = true;
console.log('bar invoked');
};
};
如果我必须选择,我会选择第二个选项,但我不喜欢在其定义中包含方法名称的冗余。 有没有更好的办法?
如果你可以超越 ES2015 并且不害怕使用实验性的东西,你可以玩装饰器。 巴别塔
class Foo {
@flag
bar() {
console.log('bar invoked');
};
};
function flag(target) {
target.descriptor.value.flag = true;
return target;
}
const foo = new Foo()
console.log(foo.bar.flag)
没有在 JavaScript 中的方法上创建属性的声明性方法(这是一件非常罕见的事情) ,所以如果你想这样做,你必须在事后做,就像在第二个例子中一样。 (或者你的第三个,但每次调用bar
都会重复,所以它有点误导和/或可能没有那么有用。)
无法引用使用严格模式调用的函数(请记住,使用类会使严格模式自动进行)。
如果您想这样做,请使用 ES5“类”:
function Foo() {};
Foo.prototype.bar = function() {
console.log('bar invoked');
arguments.callee.flag = true;
};
请记住, arguments.callee
在严格模式下是禁用的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.