我正在尝试向现有 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/