0

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

未捕获的类型错误:对象 #<'player> 没有方法 'set'

(注意:添加了播放器中的 ' 否则 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);
4

3 回答 3

1

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

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

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

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

这有效地为player“类”蓝图添加了一个功能。

于 2013-08-15T15:55:07.423 回答
0

set是存在于player()函数内部的局部变量。

它与返回的对象无关。

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

于 2013-08-15T15:38:23.723 回答
0

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

this.set = function(setx, sety){
//...
}
于 2013-08-15T15:38:40.017 回答