JavaScript类方法未被执行

时间:2016-01-11 21:31:47

标签: javascript class methods

我在使用JavaScript编写课程时遇到了一些麻烦。我看了很多例子,但似乎无法让他们理解我的东西。 alerts()永远不会出现在下面。

function Player(){

    function run(){

        alert('run');
        self.update();
        self.draw();

    }

    function draw(){
        alert('draw');
    }

    function update(){
        alert('update');
    }

}

var player1 = new Player();
player1.run(); 

5 个答案:

答案 0 :(得分:3)

使用self.name = function(){}

添加函数
function Player(){
    var self = this;
    self.run = function(){

        alert('run');
        self.update();
        self.draw();

    }

    self.draw = function(){
        alert('draw');
    }

    self.update = function(){
        alert('update');
    }

}

var player1 = new Player();
player1.run();

答案 1 :(得分:0)

语法稍微偏离..

function Player(){

    this.run = function(){

        alert('run');
        self.update();
        self.draw();

    }

    ....
}

他们都这样做..

答案 2 :(得分:0)

您可以利用以下模式之一来实现这一目标......

<table st-table="displayedCollection" st-safe-src="aggregateData" class="table">
    <thead>
        <tr>
            <th>Deptp</th>
            <th>Val_desc</th>
            <th>Std_per_lb_rate</th>
            <th>TareF</th>
            <th>QuantityP</th>
            <th>WeightP</th>
            <th>CostP</th>
            <th>Tare_CostP</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="row in displayedCollection">
            <td>{{row.Deptp}}</td>
            <td>{{row.Val_desc}}</td>
            <td>{{row.Std_per_lb_rate}}</td>
            <td>{{row.TareF}}</td>
            <td>{{row.Quantityp | number:0}}</td>
            <td>{{row.Weightp | number:2}}</td>
            <td>{{row.Costp | number:2}}</td>
            <td>{{row.Tare_Costp | number:2}}</td>
        </tr>
    </tbody>
</table>

function Player() {
    this.run = function() {
        /*...*/
    }
}

function Player() {
    function run() {
        /*...*/
    }

    return {
        run: run
    }
}

有关这些模式的更深入阅读,请查看这篇精彩的文章:3 ways to define a JavaScript class

答案 3 :(得分:0)

正如其他答案所指出的那样,内部函数尚未作为实际类的一部分公开(即它们不是 public 方法)。

按如下方式定义班级的公共方法:

function Player(){

    //PUBLIC!
    this.run = function(){
        //...
    }

    //NOT PUBLIC
    function update(){
        //...
    }
}

答案 4 :(得分:0)

因为看起来你正在进行游戏开发,所以你会想要采用更多以javascript为中心的OOP范例。如果您正在创建一个类,请在原型上定义实例方法,而不是函数本身。

为什么呢?因为当你的表演调整你的游戏时,每一毫秒或一点内存都会计算(除非你正在制作一个井字游戏或一些微不足道的游戏)。但这是一个好习惯。

function Player(){}

Player.prototype.run = function(){ ... }
Player.prototype.draw = function(){ ... }
Player.prototype.update = function(){ ... }

var player1 = new Player();
player1.run();