使用 ES6 语法定义类方法属性

在 ES5 语法中,类Foo的方法bar具有属性,flag可以这样定义:


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');

  };

};

如果我必须选择,我会选择第二个选项,但我不喜欢在其定义中包含方法名称的冗余。有没有更好的办法?


喵喵时光机
浏览 143回答 3
3回答

幕布斯6054654

如果你能超越 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)

RISEBY

在 JavaScript 中,没有声明性的方法来为方法创建属性(这是很少见的事情),所以如果你想这样做,你必须像第二个例子那样在事后做。(或者你的第三个,但每次都重复bar调用,所以它有点误导和/或可能没那么有用。)

当年话下

无法引用使用严格模式调用的函数(请记住,使用类会使严格模式自动生效)。如果您想这样做,请使用 ES5“类”:function Foo() {};Foo.prototype.bar = function() {  console.log('bar invoked');  arguments.callee.flag = true;};请记住,它arguments.callee在严格模式下被禁用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript