我对JavaScript有疑问。我目前正在使用类似于以下代码的代码:
function Game() {
}
我想嵌套对象,所以我可以这样访问它们:
var a = new Game();
a.nested_object.method();
a.nested_object.property;
我该怎么做呢?我会使用函数还是{}?或者甚至重要吗?下面的代码是我所指的示例代码。
function Game() {
this.id;
var stats = {};
}
就像我上面所述,我可以像这样访问统计数据:
var a = new Game();
a.stats
答案 0 :(得分:5)
我会这样做:
function Game() {
this.id;
this.stats = new Stats(this);
}
function Stats(game) {
this.property;
this.method = method;
function method() {
this.property;
game.id;
}
}
var game = new Game;
game.stats.method();
原因如下:
答案 1 :(得分:2)
是的,这正是要走的路。
请注意,method()
中的this
keyword将保留nested_object
,而不是您的Game
实例。只有使用指向:
function Game() {
var that = this; // the Game instance
this.id = …;
this.nested_object = {
property: "nested!",
method: function() {
this.property; // nested! (=== that.nested_object.property)
that.id // the game property
}
};
}
var game = new Game;
game.nested_object.method();
由于原型上的嵌套对象(你没有包含实例的变量)很少有意义 - 请参阅Crockford's Prototypal inheritance - Issues with nested objects。
答案 2 :(得分:0)
将“嵌套”内容添加到this
或Game.prototype
。
答案 3 :(得分:0)
[编辑回复以下评论]
这个怎么样:
function Game() {
this.nested_object = {
method: function () {
return 'method return value';
},
property: 'property value'
};
};
var a = new Game();
alert( a.nested_object.method() );
alert( a.nested_object.property );
答案 4 :(得分:0)
只需在构造函数中创建嵌套对象。
function Game() {
this.stats = { lives: 3 };
};
var a = new Game();
-- a.stats.lives;
然而,这可能很烦人,因为在Game
的实施中,您必须将stats
称为this.stats
。如果this
引用了错误的内容,例如this
表达式内部,function(){}
会加起来并引起混淆。
我的首选模式如下所示。它本质上是一个经典的OO getter功能。
function Game() {
var stats = { lives: 3 };
this.stats = function() { return stats; };
};
var a = new Game();
-- a.stats().lives;
答案 5 :(得分:0)
这应该更合适
function Game() {
this.id;
this.stats = "Hello";
return this;
}
var a = new Game();
alert(a.stats);
基本上在您的情况stats is a local variable
中,创建的对象不知道变量。
<强> Check Fiddle 强>