我写了一些这样的代码
function Flasher() {
this.cards = []
this.map = {
14: this.flip
}
}
Flasher.prototype.flip = function() {
alert(this.cards.length)
}
flasher = new Flasher()
flasher.map[14]()
不幸的是,this
对象成为flip
方法中的地图对象,并且发生错误(因为cards
未定义)。
如何让它按预期运行?有必要通过flip
间接致电map
,但我想访问flip
内的原始对象。
答案 0 :(得分:3)
function Flasher() {
var self = this;
this.cards = [];
this.map = {
14: function() { self.flip(); }
};
}
答案 1 :(得分:1)
原型模式的麻烦啊
我会把它重写为像这样的模块:
function flasher() {
var cards = [],
flip = function (){
alert(cards.length)
},
map = {
14: flip
};
return {
cards: cards,
map: map,
flip: flip
};
}
然后封闭捕捉你的范围,你永远不必担心这个。虽然为每个对象复制了翻转函数,但会丢失一些内存。但我认为代码更清晰,它允许私有变量。