我有一个数组
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(){...}
但我不确定如何
答案 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。