Javascript 如何将某些内容插入到原型链中?

Javascript 如何将某些内容插入到原型链中?,javascript,prototypal-inheritance,Javascript,Prototypal Inheritance,我有一个“类”,本质上是一个增强的数组: function NamedArray(name) { var result = []; result.name = name; return result; }; var cheeses = new NamedArray('Cheeses'); function NamedArray(name) { var result = []; result.name = name; for (var prop in NamedArra

我有一个“类”,本质上是一个增强的
数组

function NamedArray(name) {
  var result = [];
  result.name = name;
  return result;
};

var cheeses = new NamedArray('Cheeses');
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插入
结果的prototype链中
数组

James

问题是,您的“构造函数”返回的不是由
new
创建的新分配对象,而是其他对象。(而是从构造函数内部创建一个数组,并返回该数组。)

<> p>为了纠正构造函数代码的这种混淆方面,请考虑如下类似的内容:

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());

我认为这个问题是重复的:它肯定非常接近。不过,在这种情况下,我不愿意将东西合并到实际的
数组.prototype
,因为我不希望它们出现在每个
数组中,只是
NamedArray
s。我还没有弄清楚如何插入到prototype链中作为一个实例,但是我找到了解决问题的另一种方法:返回实际的
NamedArray
实例并设置
NamedArray.prototype=newarray()。这给了
NamedArray
s完整的
Array
般的支持!然而,需要预先警告的是,当您尝试以这种方式从数组继承时,IE的常用版本(例如8和9[我没有对该版本做过很多检查])可能会表现得非常非常奇怪。如果您的项目需要生产级别的稳定性,我不建议您这样做。从理论上讲,它当然有效。。。但还有微软。请查看,第二个(但由于某种原因没有“回答”)答案(Erik的)解释了处理阵列时的一些情况。有效,但并非无处不在。IE在某些浏览器中的
prototype=new Array()
it存在问题(看起来它可以正常工作,但访问器不能正常工作)。
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());