在[array]中设置未声明{object}的原型属性

时间:2014-02-26 11:07:03

标签: javascript

我有一个数组

var Nest = [];

我打算用这样的对象填充它

bird_id1 = /*gotten from some outer variable, say*/ 8;
bird_id2 =  9;
bird1 = Nest[bird_id1] = { id: bird_id1, ... }
bird2 = Nest[bird_id2] = { id: bird_id2, ... }

现在我想知道我是否可以让bird= Nest[bird_idX]通过原型设置预定义的函数,这样我就可以像

一样调用它
bird1.chirp(this.id);

Nest[bird_id2].chirp(this.id);

所以基本上chirp()函数必须被定义为{Nest[]}对象(在数组中)的protptype。怎么可能这样呢?

我会尝试定义原型属性的常规方法

Nest[?].prototype = function chirp(){...}

但我不确定如何

3 个答案:

答案 0 :(得分:2)

最好的方法是在原型中创建一个带有该函数的Object Bird,然后使用这个对象实例填充你的数组:

var Bird = function(){};
Bird.prototype.chirp = function(id){};

var bird_id =  9;
bird1 = new Bird();
bird1.id = bird_id;

var Nest = [];
Nest[ bird_id ] = bird1;

然后你可以轻松使用你的唧唧声功能:

Nest[ bird_id ].chirp();

答案 1 :(得分:1)

您可以创建Bird构造函数:

function Bird(id) {
 this.id = id;
}
Bird.prototype.chirp = function () { /*chirpchirp*/ }
// subsequently
bird_id1 = /*gotten from some outer variable, say*/ 8;
bird_id2 =  9;
bird1 = Nest[bird_id1] = new Bird(bird_id1);
bird2 = Nest[bird_id2] = new Bird(bird_id2);

答案 2 :(得分:1)

您可以使用构造函数创建鸟类:

// constructor
function Bird(id) {
  this.id = id;
}

// properties shared by all birds
Bird.prototype.chirp = function() {
  console.log('My id is: ' + this.id);
}

// nest
var Nest = [];
// ids
var bird_id_1 = 8, bird_id_2 = 9;

// create birds
Nest[bird_id_1] = new Bird(bird_id_1);
Nest[bird_id_2] = new Bird(bird_id_2);

// make them sing
Nest.forEach(function(bird){ bird.chirp(); });

请注意,虽然每只鸟都有相同的chirp方法,但该方法不需要id参数来显示不同的内容。它只是对鸟的数据起作用,在这种情况下记录它被调用的鸟的id。