javascript - 对象没有方法?

时间:2013-08-15 15:33:51

标签: javascript function object methods typeerror

所以我的问题是,我用两种方法在javascript中创建了一个基本对象,但是当我调用它们时,chrome的调试器说它们不存在。但问题是,如果我调用对象内部的任何方法,他们不会给出任何问题但是在对象之外我得到了这个:

  

未捕获的TypeError:对象#<'播放器>没有方法'设置'

(注意:'在播放器中添加'否则Stack Overflow会修剪'播放器')

以下是代码:

function player() {
    this.x=25; this.y=1;
    function set(setx,sety) {
        this.x = setx;
        this.y = sety;
        document.getElementById('x'+this.x+'y'+this.y).style.backgroundColor='000000';
    }
    function move(movex,movey) {
        document.getElementById('x'+this.x+'y'+this.y).style.backgroundColor='';
        set(movex,movey);
    }
}

这是在标题中,这是正文中的javascript代码:

var x = 25;
mainPlayer = new player();
mainPlayer.set(x,1);
var interval1 = setInterval(function() { x--; mainPlayer.set(x,1); },100);

3 个答案:

答案 0 :(得分:1)

正如@musefan和@SLaks所说,function set...内的function playerplayer函数的私有(或作用域)。要导出它们,您可以按照建议进行操作:

this.set = function(setx, sety) {...}

或者,还有另一种方法,即将函数添加到player的原型中:

function player() {...}
player.prototype.set = function(setx, sety) {...}

这有效地为player的'class'蓝图添加了一个函数。

答案 1 :(得分:0)

setplayer()函数中存在的局部变量。

它与返回的对象无关。

要将其添加到对象,请写下this.set = function(...) { ... }

答案 2 :(得分:0)

问题是你的函数对player对象实际上是“私有的”。一种选择是定义你的函数:

this.set = function(setx, sety){
//...
}