Прототип — это место для общих свойств.
Рассмотреть возможность:
var protoCircle - {x: 0, y: 0, radius: 1}
Это означает, что каждый круг будет иметь эти свойства как значения по умолчанию. Итак, если я сделаю круг с этим прототипом:
var c1 = Object.create(protoCircle);
c1.x = 3;
var c2 = Object.create(protoCircle);
c2.y = 5;
тогда круг c1 находится в точке (3,0) с радиусом 1, а c2 находится в точке (0,5) с радиусом 1. Это потому, что c1 имеет только одно собственное свойство (x) и два унаследованных свойства (y и radius), которые он берет из своего прототипа. Если я изменю protoCircle.radius, то это изменение будет видно по двум кругам. Так устроен JavaScript! Этот дизайн позволяет целой группе объектов совместно использовать значение по умолчанию, поэтому вам не нужно хранить его в каждом объекте. Вы просто помещаете свойства, уникальные для каждого объекта внутри каждого объекта, и позволяете использовать свойства по умолчанию в прототипе. В приведенном выше случае, если 99% кругов имеют радиус 1, нам не нужно хранить радиусы в наших отдельных кругах.
В вашем случае вы помещаете свойство с именем element в прототип. Все объекты, использующие этот прототип, будут иметь одинаковое значение element. Итак, если вы скажете
x.element.className = 'something'
тогда это фактически делает y.element.className также something, предполагая, что y использует тот же прототип, что и x.
Если вы хотите, чтобы каждый из именованных округленных блоков имел разные элементы, вам нужно сделать следующее:
function NamedRoundedBlock(){
...
this.element = {}
this.element.className = "Block NamedRound root";
this.element.appendChild(name);
}
person
Ray Toal
schedule
04.01.2014
Parent.apply(this,arguments);и теневые экземпляры родительского экземпляра, но вам все равно не следуетChild.prototype=new Parent();использовать Object.create с полифилом, если это необходимо: stackoverflow. com/a/16063711/1641941 - person HMR   schedule 04.01.2014