在JavaScript中获取对象字段并调用对象函数

石质的

我刚刚开始摆弄JavaScript。来自Java和OO PHP的每一步都变得怪异了:)

这是我对javascript的介绍项目,其中我已经开始编程Catan的Settlers的多人游戏版本。下面的代码尝试将N个大小的六边形地图图块的立方体坐标存储在一个数组中。

我读过您通过将函数分配给变量来在javascript中声明对象。

var Tile = function (x, y, z) {
    this.x = x;
    this.y = y;
    this.z = z;
};

var Map = function () {
    var grid = [];

    function generate_map(radius) {
        for (width = -radius; width <= radius; width++) {
            var r1 = Math.max(-radius, -width - radius);
            var r2 = Math.min(radius, -width + radius);

            for (r = r1; r <= r2; r++) {
                grid.push(new Tile(width, r, -width - r));
            }
        }
    }
};

我尝试实例化新的Map对象,调用其唯一的函数,并输出存储在grid []数组中的结果值。但是对于每个循环来说,效果并不好:(我得到了意外的标识符。

var main = function () {
    var basic_map = new Map();
    basic_map.generate_map(3);
    for each (var tile in basic_map.grid) {
        console.log(tile.x, tile.y, tile.z);
    }
};

main();  

我完全知道这是面临的错误之一,但请多多关怀,加油!

jmar777

更改此:

function generate_map(radius) {

...对此:

this.generate_map = function(radius) {

编辑:实际上有比我最初意识到的更多的问题.... :)

其他一些技巧:

首先,我建议更改:

var Tile = function (x, y, z) {

...简单来说就是:

function Tile(x, y, z) {

(地图也是如此)。您当前的解决方案可以正常工作,但不是很惯用,并且在ES6中,规范中没有任何var Tile = function导致结果函数的'name'属性设置为“ Tile”的属性,这在调试时很有用。我最近写了另一个答案,进一步探讨了例如function Foo() {}之间的差异var Foo = function() {}

其次,您可能想重命名Map为其他名称。Map现在是ES6的核心部分(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)。

第三,即使您可以使用创建generate_map函数this.generate_map,您也可能希望将其移至Map's原型。另外,由于需要公开该grid值,因此您希望将其存储为属性,而不是作用域为NewMapName构造函数的局部变量例如,:

function NewMapName() {
    this.grid = [];
}

NewMapName.prototype.generateMap = function(radius) {
    // you can access the grid here via `this.grid`
    ...
};

通过将其移至原型,这意味着的所有实例NewMapName将共享相同的功能引用,而不是一遍又一遍地创建(尽管也许您实际上只创建了一次?无论哪种方式,它都比较惯用,最低限度)。请注意,我在这里使用了“ camelCasing”(见最后一点)。

第四,您的generateMap实现泄漏了一些全局变量(widthr,因为您没有使用声明它们var)。我将其更改为:

NewMapName.prototype.generateMap = function(radius) {
    for (var width = -radius; width <= radius; width++) {
        var r1 = Math.max(-radius, -width - radius);
        var r2 = Math.min(radius, -width + radius);

        for (var r = r1; r <= r2; r++) {
            grid.push(new Tile(width, r, -width - r));
        }
    }
};

第五,您的循环有点中断。我将其重构如下:

var main = function () {
    var basicMap = new NewMapName();
    basicMap.generateMap(3);

    basicMap.grid.forEach(function(tile) {
        console.log(tile.x, tile.y, tile.z);
    });
};

main();

最后,可能也是最次要的是,在JavaScript领域,camelCase它要占主导地位snake_case,因此generate_map可能会“更好” generateMap

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在javascript中的对象内部调用对象函数

来自分类Dev

获取调用函数的对象

来自分类Dev

通过函数调用JavaScript获取对象调用者名称

来自分类Dev

在JavaScript中的构造函数中调用函数的对象

来自分类Dev

访问对象字段的JavaScript函数

来自分类Dev

访问对象字段的JavaScript函数

来自分类Dev

如何在R中的调用函数环境中获取对象?

来自分类Dev

从JavaScript的回调函数中调用对象函数

来自分类Dev

从对象函数中获取函数

来自分类Dev

对象调用函数的Javascript OR语句

来自分类Dev

调用内部对象函数javascript

来自分类Dev

获取Python 2.7中调用者的函数对象?

来自分类Dev

调用JavaScript中的方法和字段时避免对象

来自分类Dev

调用JavaScript中的方法和字段时避免对象

来自分类Dev

从字段表单中获取对象

来自分类Dev

在嵌套对象中调用函数

来自分类Dev

href =“ javascript:...”调用中的javascript对象对象

来自分类Dev

javascript从函数获取内部对象

来自分类Dev

在对象Javascript中调用Get和Set函数

来自分类Dev

javascript中调用对象和函数之间的区别

来自分类Dev

在Javascript中调用对象方法时,不是函数TypeError

来自分类Dev

如何在javascript中调用窗口对象的用户定义函数

来自分类Dev

如何在函数对象javascript中调用变量

来自分类Dev

调用存储在对象属性中的Javascript函数

来自分类Dev

在多个javascript对象中调用setInterval和clearInterval函数

来自分类Dev

javascript对象-如何在类函数中调用类变量

来自分类Dev

使用JavaScript中的函数调用向对象添加属性

来自分类Dev

从JavaScript中的对象调用具有正确参数的函数

来自分类Dev

如何访问从 JavaScript 中对象外部的函数内部调用的数组

Related 相关文章

热门标签

归档