Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';无法访问构造函数中的属性_Javascript_Function_Constructor_This - Fatal编程技术网

Javascript Can';无法访问构造函数中的属性

Javascript Can';无法访问构造函数中的属性,javascript,function,constructor,this,Javascript,Function,Constructor,This,我有一个具有一些属性和原型的构造函数。但是,由于某种原因,我无法访问原型函数中的属性 下面是一些代码(减少了代码的可读性),只是为了向您展示我的意思。在函数“renderTiles”中,我可以访问“pairs”,但在“turnTile”中,我不能访问。这有没有一个明显的原因,或者通过我的简化代码不可能找到原因 更新:更新代码以使其更清晰 DESKTOP.Game = function(){ this.pairs = 0; } DESKTOP.Game.prototype.renderT

我有一个具有一些属性和原型的构造函数。但是,由于某种原因,我无法访问原型函数中的属性

下面是一些代码(减少了代码的可读性),只是为了向您展示我的意思。在函数“renderTiles”中,我可以访问“pairs”,但在“turnTile”中,我不能访问。这有没有一个明显的原因,或者通过我的简化代码不可能找到原因

更新:更新代码以使其更清晰

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