oop - 如何获得这个javascript的这个

时间:2015-06-05 19:29:12

标签: javascript oop

我正在将一些代码更改为更像c#中的类,因此我不必为每次出现创建一个新脚本。我在构造函数上遇到了我的作用域问题,我有这个构造函数

function Game(canvas) {
    this.Polygon = function(size, pointCount){
        this.size = size;
        this.pointCount = pointCount;
        this.corners = [];
        this.palette = [];

        this.render = function (GameObject) {
            this.makePolygon(GameObject, this.size, this.corners);
        };
    };

    this.makePolygon = function(GameObject, size, corners){//other code...}
}

我的问题出在this.render中,makePolygon在类中,所以这意味着不同的东西。我尝试过使用.bind(this);但我无法让它发挥作用。

我很肯定以前曾经问过,但我找到的答案都没有对我有用。

1 个答案:

答案 0 :(得分:2)

我在不同团队中使用的约定是在javascript函数的顶部添加this,以避免出现这个问题。

示例:

this.Polygon = function(size, pointCount){
    var my = this;
    my.size = size;
    my.pointCount = pointCount;
    my.corners = [];
    my.palette = [];

    my.render = function (GameObject) {
        my.makePolygon(GameObject, my.size, my.corners);
    };
};

this.makePolygon = function(GameObject, size, corners){//other code...}

另一个选项,取决于此功能所在的位置,如下所示。

// Somewhere at the top of this code snippet
var my = this;

//...

my.Polygon = function(size, pointCount){
    my.size = size;
    my.pointCount = pointCount;
    my.corners = [];
    my.palette = [];

    my.render = function (GameObject) {
        my.makePolygon(GameObject, my.size, my.corners);
    };
};

my.makePolygon = function(GameObject, size, corners){//other code...}