首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6类文字中的生命

ES6类文字中的生命
EN

Stack Overflow用户
提问于 2016-09-02 16:45:43
回答 5查看 4.2K关注 0票数 7

在ES5中,我们都可以这样做:

代码语言:javascript
复制
myClass.prototype.myMethod = (function () {return function() {}})();

我能用ES6类文字做同样的技巧吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-09-02 16:50:15

不,至少现在还没有。ES6类只支持声明方法,所以任何不是直接方法的东西(这包括间接地对方法进行评估的东西,比如IIFE)仍然必须用原型声明。

但是,ES6类实际上与ES5构造函数的工作方式相同,只是语法更加简洁,所以仍然可以这样做:

代码语言:javascript
复制
class MyClass {
  constructor() {
    /* initialize */
  }

  regularMethod() {
    /* some stuff */
  }
}

MyClass.prototype.myMethod = (function() { return function() })()

这相当于:

代码语言:javascript
复制
function MyClass() {
  /* initialize */
}

MyClass.prototype.regularMethod = function() {
  /* some stuff */
}

MyClass.prototype.myMethod = (function() { return function() })()
票数 12
EN

Stack Overflow用户

发布于 2019-04-03 18:28:49

2019年更新

,你能做到的。

您只需要像一个“函数表达式”一样创建IIFE (将它赋值给一个变量)

代码语言:javascript
复制
class MyClass {

  IIFE = (() => {

    let textArrayCreatedJustOnce = ['text A', 'text B', 'text C'];
    console.log('Only called in object creation');


    return () => {
      console.log(textArrayCreatedJustOnce[1]);
    }

  })()

}


let myClassInstance = new MyClass(); //log: 'Only called in object creation' 


myClassInstance.IIFE(); //log: 'text B'
myClassInstance.IIFE(); //log: 'text B'
myClassInstance.IIFE(); //log: 'text B'

票数 6
EN

Stack Overflow用户

发布于 2017-06-02 14:57:28

这是有可能的板条箱装饰:

代码语言:javascript
复制
function iife(target, key, { value: fn, configurable, enumerable }) {
  return {
    configurable,
    enumerable,
    value: fn(),
  };
}

并把它当作:

代码语言:javascript
复制
class MyClass {
  @iife
  methodName() {
    /* some stuff */
    return function() {
      /* real method content */
    }
  }
}

如果我需要一些重的临时变量,比如向量矩阵,而我不想为每个方法调用设置这些变量,我就使用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39297258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档