了解JavaScript中的名称空间

时间:2018-09-29 19:35:08

标签: javascript namespaces javascript-namespaces

尽管对Python有一定的编程经验,但我对JavaScript还是很陌生。 我的问题是,我似乎不了解JS中的名称空间概念,因为它似乎与Python中的名称空间不同。这是我的代码:

{
"message": "Access Denied",
"code": "AccessDenied",
"region": null,
"time": "2018-09-29T19:31:29.411Z",
"requestId": "A26BAEB25BCD657B",
"extendedRequestId": "RYeX9fiif5V/DmIpYq9umUi0vZlCyywbDjf5hLctKOzg6cRWJRXQDAYEU+S7sL9snnr7rxD/P8c=",
"statusCode": 403,
"retryable": false,
"retryDelay": 68.10123280572672
}

按下四个箭头键之一时,将使用正确的参数执行move()函数。

现在代码显示的方式在那里,JS告诉我update()函数中的x和y值为“未定义”。但是,一旦我将它们从this.x和this.y更改为snakeObj.x和snakeObj.y,以及将this.boxid更改为“ #box”,一切都将正常运行。 我想了解为什么update()函数无法“访问”对象的值,而move()函数非常适合。

为澄清起见,工作代码如下:

    function snake(x, y) {
      // x and y coordinate of square (topleft)
      this.x = x;
      this.y = y;

      // reference to div object 'box2'
      this.boxid = "#box";
      this.box = document.getElementById(this.boxid);

      // attempts to move the box by args
      this.move = function (speedx, speedy) {
        var m = 50;
        // check if the box is within the container, moves if true
        if ((this.x+(speedx*m))<=150 && (this.y+(speedy*m))<=150 &&
        (this.y+(speedy*m))>=0 && (this.x+(speedx*m))>=0) {
          this.x = this.x + speedx*m;
          this.y = this.y + speedy*m;
        }
      }

      // called every frame to update position of the box
      this.update = function () {
        $(this.boxid).css({top: this.y, left: this.x});
      }
    }

    var snakeObj = new snake(100, 100);
    var t = setInterval(s.update, 100);

0 个答案:

没有答案