我有一个“类”,基本上是一个加强的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
的原型链?
答案 0 :(得分:2)
詹姆斯
问题是你的“构造函数”返回的内容是其他,而不是new
创建的新分配的对象。 (相反,你是从里面你的构造函数创建一个数组,然后返回它。)
要纠正构造函数代码的这个令人困惑的方面,请考虑以下内容:
function NamedArray(name) {
this.name = name;
};
NamedArray.prototype = new Array();
NamedArray.prototype.nameInAllCaps = function() {
return this.name.toUpperCase();
}
c = new NamedArray("cheeses");
console.log(c.name);
console.log(c.nameInAllCaps());