Прототип ОО работает так: когда вы:
- ищите свойство объекта, скажем
imageContainer
- Он будет искать свойства этого объекта,
- Если он не может найти ничего, он будет смотреть на прототип (
ImageContainer.prototype
) - Если он не может найти что-либо, он будет смотреть на следующий прототип ('Container.prototype')
- И следующий прототип ('Object.prototype') до тех пор, пока цепочка прототипов не станет пустой, и в этом случае он возвращает
undefined
.
Это означает, что при добавлении свойства GUID
Container.prototype.GUID = 42;
Все объекты с Container.prototype
в цепочке прототипов будут использовать это свойство.
Если вы не хотите, чтобы это свойстводля совместного использования очень трудно добавить уникальный GUID ко всем объектам с Container.prototype
в их цепочке прототипов.
Однако вы можете использовать .isPrototypeOf
, чтобы проверить, имеет ли объектпрототип в их цепочке.
Пример:
var objs = [..]; // all objects
objs.forEach(function(v) {
if (Container.prototype.isPrototypeOf(v)) {
v.GUID = window.GUID++;
}
});
Однако это зависит от
- ES5.Используйте ES5-shim
- Вы можете создать массив
objs
со всеми объектами, которые вы, возможно, захотите расширить.