gpt4 book ai didi

javascript - 无法在 ES6 类定义中定义原型(prototype)属性

转载 作者:数据小太阳 更新时间:2023-10-29 04:45:41 25 4
gpt4 key购买 nike

我在尝试 ES6 语法,发现我不能在类定义中定义原型(prototype)属性或实例属性,为什么禁止它?

我之前使用的是MyClass.prototype.prop=1,通过babel编译器尝试ES7,如下所示,仍然无法定义原型(prototype)属性。

class MyClass{
prop=1;
static sProp=1;
}

我不认为定义实例属性有任何危险,在我自己的浏览器游戏中有 2 种情况需要原型(prototype)属性:

  1. 子类实例需要从基类继承相同的属性值:

    var Building=function(){...}
    Building.prototype.sight=350;
    TerranBuilding.CommandCenter=...(CommandCenter extends Building)
    TerranBuilding.Barracks=...(Barracks extends Building)

所以 CommandCenter 和 Barracks 的建筑视野都与 350 相同。

new CommandCenter().sight===new Barracks().sight//All buildings have same sight
  1. 缓冲效果覆盖原始属性并移除缓冲

    Marine.prototype.speed=20
    var unit=new Marine()
    unit.speed===20//get unit.__proto__.speed 20
    unit.speed=5//Buffer:slow down speed, unit.speed will override unit.__proto__.speed
    delete unit.speed//Remove buffer
    unit.speed===20//true, speed restore

所以我认为它应该增加一种设置原型(prototype)属性的方法而不是完全禁止它,或者你能提供一些其他的解决方案来处理以上两种情况吗?

最佳答案

这些都不会出现在类原型(prototype)上。

类 Foo { bar = 1; } 语法将为 class instance 赋值, 可通过 this.bar 访问。

类 Foo { static bar = 1; } 语法将为 class constructor 赋值, 可通过 Foo.bar 访问。

在这种情况下没有太多理由使用原型(prototype)。这只会使实际拥有该属性(property)的人复杂化,并且在几个不同的类别中分配一个数字只会产生很少的开销。

我会建议使用类实例属性,并在任何需要的地方使用 this.sight

关于javascript - 无法在 ES6 类定义中定义原型(prototype)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311805/

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