【问题标题】:Javascript: Once a 'class/object' has been 'extended', is it possible to re-extend it using a different base 'class/object'?Javascript:一旦“类/对象”被“扩展”,是否可以使用不同的基“类/对象”重新扩展它?
【发布时间】:2011-07-21 14:51:31
【问题描述】:

我正在尝试向现有 JS 框架 (Wireit) 中的类树添加一个新属性。更多详情请看这里:Javascript: Is it possible to inject new functions into a base 'class/object' that will be available in all sub-'classes/objects'?

我最初的方法是重新定义基类,但事实证明这很棘手。

我现在想知道是否可以对基类进行子类化,添加我的扩展,然后将扩展基类的类重新子类化以使用我的基类。复杂?我会做一个简单的图表来说明我的意思....

当前继承

Container --> ImageContainer
Container --> FormContainer

新继承

Container --> MyContainer --> ImageContainer
Container --> MyContainer --> FormContainer

这可能吗?

【问题讨论】:

  • 我不确定您的图表应该如何解释。考虑到 JS 中没有“多重继承”这一事实,ContainerImageContainerFormContainer 有什么关系?
  • @Tomalak - 查看我的编辑。希望现在更清楚了。 ImageContainer 和 FormContainer 都扩展了 Container。
  • 你打算如何改变已经存在的对象?你也面临同样的问题。
  • @paul:啊。我现在明白了,我对箭头的解释是错误的。
  • Javascript 没有类。

标签: javascript oop prototype-programming


【解决方案1】:

只需将guid 添加为方法即可。

Container.prototype.GUID = function() {
  return GUIDSystem.getGUID(this);
}

编写您自己的 GUIDSystem 以返回每个对象的唯一 GUID。

提示:使用WeakMap、WeakMap shim 和地图中 GUID 的惰性填充。

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 2023-03-19
    • 2014-09-16
    • 2013-03-27
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多