对对象的引用';从Javascript中的对象中删除数组

对对象的引用';从Javascript中的对象中删除数组,javascript,arrays,object,function-expression,Javascript,Arrays,Object,Function Expression,我想创建InvertedPeninsula类型的新对象: var invertedPeninsula = new InvertedPeninsula(); 要创建此对象类型,我使用对象构造函数函数: var InvertedPeninsula = function() { this.inhabitants = [ { name: 'Flanery', race: 'Human' }, { name: 'Sir Charles',

我想创建InvertedPeninsula类型的新对象:

var invertedPeninsula = new InvertedPeninsula();
要创建此对象类型,我使用对象构造函数函数:

var InvertedPeninsula = function() {
  this.inhabitants = [
    {
      name: 'Flanery',
      race: 'Human'
    },
    {
      name: 'Sir Charles',
      race: 'Human'
    },
    {
      name: 'Ealei',
      race: 'Elf'
    },
    {
      name: 'Orado',
      race: 'Spector'
    }
  ];

  this.inhabitants.getRace = function(race) {
    var members = [];
    for (var i=0, l = this.length; i < l; i++) {
      if (this[i].race === race) {
        members.push(this[i]);
      }
    }

    return members;
  };

  this.inhabitants.humans = function() {
    return this.getRace('Human');
  };

  this.inhabitants.elves = function() {
    return this.getRace('Elf');
  };

  this.inhabitants.spectors = function() {
    return this.getRace('Spector');
  };
};
分别。然而,它不应该是:

return this.inhabitants.getRace('Human');
return this.inhabitants.getRace('Elf');
return this.inhabitants.getRace('Specter');
我做了这些建议的更改,但在尝试调用任何一个函数时,例如:

invertedPeninsula.inhabitants.humans();
我发现以下错误:

未捕获的TypeError:无法读取未定义的属性“getRace”

未捕获的TypeError:无法读取未定义的属性“length”

我使用的是谷歌Chrome 55.0.2883.87 m


关于引擎盖下面发生的事情,有什么可能的解释吗?

它之所以有效,是因为您这样做的背景:

invertedPeninsula.inhabitants.humans();
。。。不是
invertedPeninsula
,而是
invertedPeninsula.incidents
,因此方法中对
的任何引用均为
invertedPeninsula.incidents

还请注意,您在构造函数中只定义了一个属性:
incidents


您在该构造函数中定义的所有其他方法都不是在
this
上创建的,而是在
this.incidents
上创建的,正是该数组对象被更多方法扩展,而不是正在构造的对象。

可能的重复“究竟为什么这个构造函数可以不提及其名称而引用Inmobiles数组“-它不能,更重要的是,它不是。事实上,除了定义数组并向其添加四个方法属性外,构造函数本身根本不访问数组。但是,添加到数组对象的方法可以使用
this
直接访问该数组对象,因为调用它们时,
this
将是嵌套的数组对象,而不是外部对象。
return this.inhabitants.getRace('Human');
return this.inhabitants.getRace('Elf');
return this.inhabitants.getRace('Specter');
invertedPeninsula.inhabitants.humans();
invertedPeninsula.inhabitants.humans();