# Прототипное ООП. ## Идея. Прототипное ООП в **JS** базируется на простой идее, которую следует запомнить: каждый объект имеет прототип, т. е. другой *объект*, в котором ищуться *поля* в случае отсутствия их в оригинальном объекте: ```javascript var a = {}; a.toString() // "[object Object]" a.__proto__ // Object {} a.__proto__.constructor // function Object() { [native code] } ``` `a.toString()` отсутствует как явно определенный в объекте `a`, однако он найден в *прототипе* `Object`. ```javascript function Drawable(){ Drawable.prototype.addInstance(this); } Drawable.prototype.draw = function(){}; Drawable.prototype.instances = []; Drawable.prototype.addInstance = function(item){ Drawable.prototype.instances.push(item); } Drawable.prototype.drawAll = function(){ for(var i = 0; i