Как иметь кучу экземпляров прототипа?

Fiddle !!

Я пытаюсь создать систему, в которой у меня может быть множество экземпляров colorBox, у меня есть один из них с именем box. Все работает нормально, за исключением того, что я хочу иметь возможность изменять стили моего нового colorBox (s) после того, как они были созданы, делая что-то вроде box.resetColor('blue'); Чтобы проверить это, я создал простую функцию vodoo которая просто предупреждает вас. Но я не могу вызвать box.vodoo() потому что colorBox - это функция, а не объект.

Каков наилучший способ иметь кучу экземпляров colorbox которые могут быть обновлены индивидуально, когда вы хотите, не обновляя все свойства box (только те, которые вы хотите)?

JS:

var colorBox = function(node, options) {
 this.setSize = function(){
 node.style.width = options.width + 'px';
 node.style.height = options.height + 'px';
 };
 this.setColor = function(){
 node.style.backgroundColor = options.color;
 };
 this.setSize();
 this.setColor();
 vodoo(){
 alert('vodoo');
 }
}

var node = document.getElementById('thing1');
var options = {
 color: 'red',
 width: 200,
 height: 200
}

var box = new colorBox(node, options);
box.vodoo();
1 ответ

http://jsfiddle.net/K8cha/5/

Возможно, я не понимаю, что вы пытаетесь сделать здесь, но есть синтаксическая ошибка в том, как вы объявили voodoo. Это изменение заставляет это работать:

var colorBox = function(node, options) {
 this.setSize = function(){
 node.style.width = options.width + 'px';
 node.style.height = options.height + 'px';
 };
 this.setColor = function(){
 node.style.backgroundColor = options.color;
 };
 this.setSize();
 this.setColor();
 this.voodoo = function(){
 alert('voodoo');
 }
}

Кроме того, в JS объект Function является потомком объекта Object и поэтому может использоваться как таковой со своими собственными свойствами и т.д.

licensed under cc by-sa 3.0 with attribution.