Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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 发送对象';属性作为函数的参数返回未定义的_Javascript_Jquery_Object - Fatal编程技术网

Javascript 发送对象';属性作为函数的参数返回未定义的

Javascript 发送对象';属性作为函数的参数返回未定义的,javascript,jquery,object,Javascript,Jquery,Object,我正在进入javascript/jQuery,因此我正在构建一个植物vs僵尸。我为敌人创建了一个对象,并为显示该代码的每个敌人创建了一个引用: 这就是目标: var Enemy = function(row, num) { 'use strict'; this.row = row; this.number = num; this.move_interval; this.html_element; }; Enemy.prototype.create = f

我正在进入javascript/jQuery,因此我正在构建一个植物vs僵尸。我为敌人创建了一个对象,并为显示该代码的每个敌人创建了一个引用: 这就是目标:

var Enemy = function(row, num) {
    'use strict';
    this.row = row;
    this.number = num; 
    this.move_interval;
    this.html_element;
};
Enemy.prototype.create = function() {
    this.html_element = $('<div class="enemy '+this.row+' full" style="left:1140px;top: '+$('tr.row_'+this.row).position().top+'px"></div>').prependTo('.container');

    return this;
};
Enemy.prototype.die = function() {
    clearInterval(this.move_interval);
    this.html_element.remove();
    return this;
};
Enemy.prototype.move = function() {
    this.move_interval = setInterval(function() {moveEnemy(this.number)}, 2000);
    return this;
};
这是创建敌人的函数(随机的东西是因为我有四行敌人可以在上面繁殖,这也是对象中属性行的用途):

我尝试了几种方法,通过编辑move敌手函数来获取属性“html_element”作为参数,并以这种方式进行操作:

function moveEnemy(obj) {
    obj.animate({left: "-=150"}, 2000, "linear");
}
我试着把它写得像敌人一样[number][html_元素],因为我读到这实际上是获得一个属性的方法,但效果不太好。它总是告诉我参数('obj'或上面的'number'未定义)


有人能看出那个错误吗?D:

问题出在您的
setInterval
函数中,该函数的作用域已更改,
已成为全局(窗口)对象

move
功能更改为:

Enemy.prototype.move = function() {
    var me = this;
    this.move_interval = setInterval(function() {moveEnemy(me.number)}, 2000);
    return this;
};

使用上述修复程序的JSFIDLE可以在id发布小提琴时正常工作。
function moveEnemy(number) {
    enemies[number].html_element.animate({left: "-=150"}, 2000, "linear");
}
function moveEnemy(obj) {
    obj.animate({left: "-=150"}, 2000, "linear");
}
Enemy.prototype.move = function() {
    var me = this;
    this.move_interval = setInterval(function() {moveEnemy(me.number)}, 2000);
    return this;
};