Javascript:是否可以将新函数注入(inject)到基础 'class/object' 中,该函数将在所有子 -'classes/objects' 中可用?

标签 javascript prototype-programming

我正在尝试向现有 JavaScript 框架 (Wireit) 中的类添加新属性。

基类称为 Container,我希望所有容器都具有 GUID 属性。 Container 目前分为 ImageContainer、FormContainer 等子类。

如果我扩展 Container 以具有 GUID,该 GUID 在 ImageContainer、FormContainer 等中是否可用?

我该怎么做?例子?

最佳答案

原型(prototype)面向对象的工作方式是:

  • 查找对象的属性,例如 imageContainer
  • 它将查找该对象的属性,
  • 如果找不到任何内容,它将在原型(prototype) (ImageContainer.prototype) 上查找
  • 如果找不到任何原型(prototype),它将查找下一个原型(prototype)(“Container.prototype”)
  • 以及下一个原型(prototype)('Object.prototype'),直到原型(prototype)链为空,在这种情况下,它返回未定义

这意味着如果您添加属性GUID

Container.prototype.GUID = 42;

原型(prototype)链中具有 Container.prototype 的所有对象都将共享该属性。

如果您不希望共享该属性,则很难向原型(prototype)链中具有 Container.prototype 的所有对象添加唯一的 GUID。

但是您可以使用 .isPrototypeOf检查一个对象在其链中是否有原型(prototype)。

示例:

var objs = [..]; // all objects 

objs.forEach(function(v) {
  if (Container.prototype.isPrototypeOf(v)) {
    v.GUID = window.GUID++;
  }
});

然而,这依赖于

    ES5。使用ES5-shim
  • 您能够使用您可能想要扩展的所有对象创建数组 objs

关于Javascript:是否可以将新函数注入(inject)到基础 'class/object' 中,该函数将在所有子 -'classes/objects' 中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6777201/

相关文章:

javascript - Something.prototype.else 和 Something.else 有什么区别

javascript - 获取 'ngbCollapse' 因为它不是 'div' 的已知属性。将组件移入子模块后出错

javascript - Node.js 中的 declare var 是什么?

javascript - 如何访问构造函数变量?

Javascript原型(prototype)和修改原始对象

Javascript 数组扩展方法在 for 循环中被迭代

javascript - 如何让原型(prototype)方法访问父变量?

javascript - 使用 javascript 将 SVG 保存为 PNG 未知 DOM 异常

javascript - Jquery iCheck 在列表输入中不起作用

javascript - 动态的跨浏览器脚本加载