У меня есть «класс», который по сути является усиленным Array
:
function NamedArray(name) {
var result = [];
result.name = name;
return result;
};
var cheeses = new NamedArray('Cheeses');
Это прекрасно работает. Что не работает, так это добавление прототипа для этого "класса":
NamedArray.prototype = {
nameInAllCaps: function() {
return this.name.toUpperCase();
}
};
cheeses.nameInAllCaps();
=> TypeError: Object #<Object> has no method 'nameInAllCaps'
Моей первой мыслью было просто смешать «прототип» с result
Array
:
function NamedArray(name) {
var result = [];
result.name = name;
for (var prop in NamedArray.prototype) {
if (NamedArray.prototype.hasOwnProperty(prop) {
result[prop] = NamedArray.prototype[prop];
}
}
return result;
};
Это работает, но каждый экземпляр имеет собственную копию свойств прототипа. Есть ли способ вставить NamedArray.prototype в цепочку прототипов result
Array
?
Array.prototype
, потому что я не хочу, чтобы они отображались для каждогоArray
, толькоNamedArray
. - person James A. Rosen   schedule 08.04.2011NamedArray
и установитьNamedArray.prototype = new Array();
. Это даетNamedArray
s полнуюArray
поддержку! - person James A. Rosen   schedule 08.04.2011