gpt4 book ai didi

javascript - ES6 类变量替代方案

转载 作者:行者123 更新时间:2023-11-28 06:10:44 24 4
gpt4 key购买 nike

目前,在 ES5 中,我们许多人在框架中使用以下模式来创建类和类变量,这很舒服:

// ES 5
FrameWork.Class({

variable: 'string',
variable2: true,

init: function(){

},

addItem: function(){

}

});

在 ES6 中,您可以原生创建类,但无法选择拥有类变量:

// ES6
class MyClass {
const MY_CONST = 'string'; // <-- this is not possible in ES6
constructor(){
this.MY_CONST;
}
}

遗憾的是,上面的方法不起作用,因为类只能包含方法。

我知道我可以在构造函数中使用this.myVar = true…但我不想“垃圾”我的构造函数,尤其是当我有 20-30 个构造函数时+ 更大类的参数。

我想了很多方法来解决这个问题,但还没有找到好的方法。 (例如:创建一个 ClassConfig 处理程序,并传递一个 parameter 对象,该对象与类分开声明。然后处理程序将附加到该类。我在想WeakMaps 也以某种方式进行集成。)

你有什么样的想法来处理这种情况?

最佳答案

2018年更新:

现在有一个第 3 阶段的提案 - 我期待着在几个月内使这个答案过时。

与此同时,任何使用 TypeScript 或 babel 的人都可以使用以下语法:

varName = value

在类声明/表达式主体内,它将定义一个变量。希望在几个月/几周内我能够发布更新。

更新:Chrome 74 现在附带此语法。

<小时/>

ES wiki 中关于 ES6 提案的注释 ( maximally minimal classes ) 注意:

There is (intentionally) no direct declarative way to define either prototype data properties (other than methods) class properties, or instance property

Class properties and prototype data properties need be created outside the declaration.

Properties specified in a class definition are assigned the same attributes as if they appeared in an object literal.

这意味着您的要求已被考虑,并明确决定反对。

但是...为什么?

好问题。 TC39 的好心人希望通过类声明来声明和定义类的功能。不是它的成员。 ES6 类声明为其用户定义其契约。

请记住,类定义定义了原型(prototype)方法 - 在原型(prototype)上定义变量通常不是您要做的事情。当然,您可以使用:

constructor(){
this.foo = bar
}

按照您的建议在构造函数中。另请参阅the summary of the consensus .

ES7 及更高版本

正在制定 ES7 的新提案,允许通过类声明和表达式更简洁的实例变量 - https://esdiscuss.org/topic/es7-property-initializers

关于javascript - ES6 类变量替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36428409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com