プロトタイプにオブジェクトリテラルを追加しています。私は、オブジェクトのプロパティを取得し、値を配列に入れることで、これを実行しています。次に、コンストラクタを使用して配列を引数として新しいオブジェクトを作成します。なぜ適用すると、引数に使用する配列の最初の要素をスキップしますか?
唯一の問題は、新しいオブジェクトを作成するときに配列の最初の要素をスキップしているため、新しいオブジェクトの間違った値に間違った値を割り当てることです。空の。
デバッガでは、配列とコンストラクタ関数の両方が、プロパティ/要素を正しい順序で表示します。しかし、出力は正しくありません。
新しいオブジェクトのコンストラクタに引数を直接入れて新しいオブジェクトを作成することができます。しかし、これは読むのが難しいです。プロトタイプにオブジェクトを付ける別の方法がないかぎり?または、コンストラクタの準備が整った、私のデータを整理するためのちょっとした方法?
(function(root, undefined) {
var roomArray = [
{
locationIndex: 0,
name: "North room",
description: "The room is bare, there is a smashed window on the North wall, beyond which you see a grey mist.",
exits: {north: false, south: 1, east: false, west: false, down: false, up: false}
},
{
locationIndex: 1,
name: "Room 1",
description: "It is hard to see much here.",
exits: {north: 0, south: 3, east: 2, west: false, down: false, up: false}
},
{
locationIndex: 2,
name: "Room 2",
description: "A bedroom.",
exits: {north: false, south: false, east: false, west: 1, down: false, up: false}
},
{
locationIndex: 3,
name: "kitchen",
description: "A kitchen.",
exits: {north: 1, south: false, east: false, west: false, down: false, up: false}
}
];
// Room constructor
function Room(location, name, description, exits) {
this.location = location;
this.name = name;
this.description = description;
this.exits = exits;
}
// Create Rooms
roomArray.forEach(function(room, index) {
var convertArray = [];
for (var props in room) {
convertArray.push(room[props]);
}
eval("room_" + index + " = new (Room.bind.apply(Room, convertArray))()");
console.log(convertArray);
console.log(eval("room_" + index))
});
})(this);
あなたの関数のパラメータが「未定義」であるのはなぜですか? –
古い習慣は、 '未定義'が実際には未定義であることを保証することです。それはおそらく必要ではない、私はちょうどそのようにそれを学んだ。 – Cuckoo