gpt4 book ai didi

javascript - 如何避免 ES6 Javascript 类继承命名冲突

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:21:46 24 4
gpt4 key购买 nike

如何避免 ES6 Javascript 中类继承的命名冲突?

大型 ES6 Javascript 应用程序使用大量继承,以至于在基类中使用泛型名称可能意味着稍后在创建派生类时会出现令人头疼的调试问题。这可能是类设计不佳的产物,但似乎更多是 Javascript 能够顺利扩展的问题。其他语言提供了隐藏继承变量 (Java) 或属性 (C#) 的机制。缓解此问题的另一种方法是使用 Javascript 不具备的私有(private)变量。


这是此类碰撞的示例。一个 TreeObject 类扩展了一个事件对象(以继承事件功能),但它们都使用 parent 来存储它们的父对象。

class Evented {
constructor(parent) {
this.parent = parent;
}
}
class TreeObject extends Evented{
constructor(eventParent, treeParent) {
super(eventParent);
this.parent = treeParent;
}
}

虽然这个例子有点人为,但我在像 Ember 这样的大型库中遇到过类似的冲突,其中库和最终应用程序之间的术语有很多重叠,导致我到处浪费时间。

最佳答案

这似乎确实是一个设计问题(使用较小的对象和更扁平的层次结构),但您的问题也有一个解决方案:符号!

const parentKey = Symbol("parent");
export class Evented {
constructor(parent) {
this[parentKey] = parent;
}
}

import {Evented} from "…"
const parentKey = Symbol("parent");
class TreeObject extends Evented {
constructor(eventParent, treeParent) {
super(eventParent);
this[parentKey] = treeParent;
}
}

它们将可靠地防止任何冲突,因为所有符号都是唯一的,无论它们的描述符如何。

关于javascript - 如何避免 ES6 Javascript 类继承命名冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171092/

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