繁体   English   中英

我如何在一个类中运行函数。 Java脚本

[英]How do I run function inside a class. Javascript

我很难在类中调用函数。 当我开始对此进行操作时,我已经运行了它,但是在进行修订之后,我无法使其工作:((
您可以忽略我的警报,因为我只是将它们放在其中以检查该函数是否被调用。
我有函数“ Unit”,这对我来说是一个类。 然后我在下面称呼它。
从下面的代码, new Unit(args)不会完成。 它停在this.direction=this.setDirection(); 并且由于某种原因未调用this.setDirection() 谁能看看并告诉我出了什么问题?
谢谢!


var teamBlack = [];

var bking = new Unit("black", "king", new Coords(3,1, false));
teamBlack.push(bking);

function Unit(team, type, coords) {

    alert("Unit started " + count);
    this.team = team;
    this.type = type;

    this.position = coords;
    this.highlight = false;
    alert("before setdirection");
    this.direction = this.setDirection();
    alert("this " + this.type);

    this.setDirection = function () {
        alert("setDirection Started ");
        alert(this.type);
        var tempDir = [];
        switch (this.type) {
            case "king" :
                alert("this is king");
                tempDir = [this.N(), this.NW(), this.W(), this.SW(), this.S(), this.SE(), this.E(), this.NE()];
                break;
            case "bishop" :
                tempDir = [this.NW(), this.SW(), this.SE(), this.NE()];
                break;
            case "rook" :
                tempDir = [this.N(), this.S(), this.W(), this.E()];
                break;
            case "pawn" :
            {
                if (this.team == "white") {
                    tempDir = [this.S()];
                } else {
                    tempDir = [this.N()];
                }
                break;
            }
            case "queen" :
            {
                if (this.team == "white") {
                    tempDir = [this.N(), this.W(), this.SW(), this.S(), this.SE(), this.E()];
                } else {
                    tempDir = [this.N(), this.NW(), this.W(), this.S(), this.E(), this.NE()];
                }
                break;
            }

        }
        tempDir = tempDir.filter(function (dir) {
            return dir.x > -1 && dir.x < 3 && dir.y > -1 && dir.y < 4 && dir.c == false;
        });

        return tempDir;
    }
}

该代码是错误的,因为您尝试了在类中尚不存在的调用函数。 我建议您在原型中移动此功能。 例如:

function Unit() {
    //this is your constructor
}

Unit.prototype.setDirection = function() {
    //your code of setDirection function
}

确保定义了变量,然后在调用this.setDirection()之前放入this.setDirecton = function()...

参见JSFiddle

我将通过分离职责来改进您的代码:

//create the class Unit

    function Unit(team, type, coords) {

        alert("Unit started " + count);
        this.team = team;
        this.type = type;

        this.position = coords;
        this.highlight = false;
    }

然后,为您的类指定新方法:

Unit.prototype.setDirection = function () {
        alert("setDirection Started ");
        alert(this.type);
        var tempDir = [];
        switch (this.type) {
            case "king" :
                alert("this is king");
                tempDir = [this.N(), this.NW(), this.W(), this.SW(), this.S(), this.SE(), this.E(), this.NE()];
                break;
            case "bishop" :
                tempDir = [this.NW(), this.SW(), this.SE(), this.NE()];
                break;
            case "rook" :
                tempDir = [this.N(), this.S(), this.W(), this.E()];
                break;
            case "pawn" :
            {
                if (this.team == "white") {
                    tempDir = [this.S()];
                } else {
                    tempDir = [this.N()];
                }
                break;
            }
            case "queen" :
            {
                if (this.team == "white") {
                    tempDir = [this.N(), this.W(), this.SW(), this.S(), this.SE(), this.E()];
                } else {
                    tempDir = [this.N(), this.NW(), this.W(), this.S(), this.E(), this.NE()];
                }
                break;
            }

        }
        tempDir = tempDir.filter(function (dir) {
            return dir.x > -1 && dir.x < 3 && dir.y > -1 && dir.y < 4 && dir.c == false;
        });
        alert("before setdirection");
        this.direction = tempDir;//setMethod doesn't return thing but set something somewhere
        alert("this " + this.type);
    };

现在调用类实例:

var teamBlack = [];

var bking = new Unit("black", "king", new Coords(3,1, false));
bking.setDirection();
teamBlack.push(bking);

我建议你看看这个链接

您需要将setDirection函数用作Unit类的原型。

Unit.prototype.setDirection = function() {
    //setDirection functionality
}

在原型中,您可以通过this访问类属性。

检查此jsFiddle: https ://jsfiddle.net/urtr3quc/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM