Javascript Can';无法访问构造函数中的属性
我有一个具有一些属性和原型的构造函数。但是,由于某种原因,我无法访问原型函数中的属性 下面是一些代码(减少了代码的可读性),只是为了向您展示我的意思。在函数“renderTiles”中,我可以访问“pairs”,但在“turnTile”中,我不能访问。这有没有一个明显的原因,或者通过我的简化代码不可能找到原因 更新:更新代码以使其更清晰Javascript Can';无法访问构造函数中的属性,javascript,function,constructor,this,Javascript,Function,Constructor,This,我有一个具有一些属性和原型的构造函数。但是,由于某种原因,我无法访问原型函数中的属性 下面是一些代码(减少了代码的可读性),只是为了向您展示我的意思。在函数“renderTiles”中,我可以访问“pairs”,但在“turnTile”中,我不能访问。这有没有一个明显的原因,或者通过我的简化代码不可能找到原因 更新:更新代码以使其更清晰 DESKTOP.Game = function(){ this.pairs = 0; } DESKTOP.Game.prototype.renderT
DESKTOP.Game = function(){
this.pairs = 0;
}
DESKTOP.Game.prototype.renderTiles = function() {
console.log(this.pairs); <- undefined
var gamearea = $('<div/>', {
'text': 'testarea',
'class': 'gamearea'
}).appendTo('.memory:last');
alert("this.rows: " + this.rows);
for (var j = 0; j < this.rows; j++){
var box = document.createElement('div');
for (var i = 0; i < this.cols; i++){
var iterator = (this.cols * j) + i;
var img = document.createElement('img');
var aNod = document.createElement('a');
aNod.href = "#";
img.src = "pics/memory/0.png";
aNod.appendChild(img);
box.appendChild(aNod);
var self = this;
(function(place, index) {
this.addEventHandler(aNod, 'click', function() { this.turnTile(place, index); return false; });
})(iterator, this.imgArray[iterator]);
}
gamearea[0].appendChild(box);
}
}
DESKTOP.Game.prototype.turnTile = function(place, id) {
console.log(this.pairs); <- undefined
// removed code...
}
DESKTOP.Game=function(){
这1.2对=0;
}
DESKTOP.Game.prototype.renderTiles=函数(){
console.log(this.pairs);这是因为this
的值取决于您如何调用turnTiles
因为你在做:
DESKTOP.Game.prototype.turnTile(place, index)
…此
的值将是原型
对象,但对
放在从游戏
创建的每个单独对象上,而不是放在原型
上
我不知道您是如何调用renderTiles
,但我假设您创建了Game
的一个实例并从那里调用
由于不知道您的代码是如何工作的,我猜您也希望在实例上调用addEventHandler
如果是这样,您将替换此:
(function(place, index) {
DESKTOP.Game.prototype.addEventHandler(aNod, 'click', function() { DESKTOP.Game.prototype.turnTile(place, index); return false; });
})(iterator, this.imgArray[iterator]);
为此:
var self = this;
(function(place, index) {
self.addEventHandler(aNod, 'click', function() { self.turnTile(place, index); return false; });
})(iterator, this.imgArray[iterator]);
或者别的什么
虽然我不知道你为什么在这里使用IIFE,除非你在循环中。谢谢你的回答。我尝试了“var self=this”,但在控制台中得到以下错误消息:“Uncaught TypeError:Object[Object DOMWindow]没有方法‘addEventHandler’”@JasonCraig:那是因为你需要
self.addEventHandler
和self.turnTile
。你有this.addEventHandler
和this.turnTile
。