【发布时间】:2013-05-11 22:54:01
【问题描述】:
如何缓存最顶层的范围,以便以后在原型中更深入地使用,如下所示:
var Game = function(id){
this.id = id;
};
Game.prototype = {
board : {
init: function(){
// obviously "this" isn't the instance itself, but will be "board"
console.log(this.id);
}
}
}
var game = new Game('123');
game.board.init(); // should output "123"
更新:
现在想想,我可以使用apply/call 并传递上下文...
game.board.init.apply(game);
【问题讨论】:
-
它就像一个静态类,当你在原型中创建对象时,所有实例中的对象都是相同的。它的意思是 (new Game()).board == Game.board 和 (new Game()).board.init == Game.board.init .. 表示对象内部另一个对象的“this”是父对象,它的意思是“this”在内部初始化函数与板子相同:在初始化函数中 -> this == Game.board
-
您需要多个 Game 实例吗?看起来它应该是一个命名空间(以对象文字的形式);那么你就有了 Board 的构造函数和原型,以及任何你需要的东西。
-
是的,我必须有实例。数量不详。
-
毕竟我决定使用“应用”
-
@vsync:如果您使用
apply,您将调用init方法作为game实例的成员,而不是作为board实例的成员。那么最好将board对象的成员放在Game对象中,然后完全抛弃board对象。
标签: javascript prototype