html中给属性赋值变量,javascript – 为什么TypeScript使用对象属性赋值作为对象键和变量赋值作为函数参数?...

enum Fruit {APPLE, ORANGE};

显示编译为此JavaScript:

var Fruit;

(function (Fruit) {

Fruit[Fruit["APPLE"] = 0] = "APPLE";

Fruit[Fruit["ORANGE"] = 1] = "ORANGE";

})(Fruit || (Fruit = {}));

在第3行和第4行,对象属性赋值被用作对象键:

Fruit[Fruit["APPLE"] = 0] = "APPLE";

Fruit[Fruit["ORANGE"] = 1] = "ORANGE";

在第5行,变量赋值被用作函数参数:

})(Fruit || (Fruit = {}));

根据我的理解,Fruit = {}包含在括号中,因此它不是命名参数.

相反,它被评估并传递给IIFE作为它的第一个参数,但只有当第一个Fruit未定义时,它可能是(第1行:var Fruit;),因为TypeScript不允许重复定义.

这对我来说没有意义,为什么TypeScript使用对象属性赋值作为对象键和变量赋值作为函数参数?

将枚举编译成这样是不是更有意义:

var Fruit = Fruit || {};

Fruit.APPLE = Fruit[0] = "APPLE";

Fruit.ORANGE = Fruit[1] = "ORANGE";

或这个:

var Fruit = {};

Fruit.APPLE = Fruit[0] = "APPLE";

Fruit.ORANGE = Fruit[1] = "ORANGE";

代替?

解决方法:

分配的评估是价值. IIFE函数的目的是创建一个双向值的对象 – >密钥和密钥 – >值.

这里有一个有趣的console.log就是Fruit本身.

var Fruit;

(function (Fruit) {

Fruit[Fruit["APPLE"] = 50] = "APPLE";

Fruit[Fruit["ORANGE"] = 10] = "ORANGE";

})(Fruit || (Fruit = {}));

// main.js

var bowl = [Fruit.APPLE, Fruit.ORANGE];

console.log(Fruit);

如果我们重新开始解释:

Fruit被传递给IIFE函数,如果它不存在,它被初始化为一个空对象{}.

然后第一对键 – >将值插入到对象中,结果如下:

{

APPLE: 50,

}

(因为分配首先在线上执行):

Fruit[Fruit["APPLE"] = 50] = "APPLE";

然后将第二对插入到Fruit对象中:

Fruit[50] = "APPLE";

标签:javascript,typescript,enums,compilation

来源: https://codeday.me/bug/20190823/1696874.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值