嵌套函数中“this”关键字的范围?

时间:2013-10-07 04:23:07

标签: javascript this

您好我的代码如下:

var myClass = {
    globalVar : {
        total : 100
    },
    myFunction : {
        getTotal : function() {
            return this.globalVar.total;
        }
    },
};

// Uncaught TypeError: Cannot read property 'total' of undefined 
alert(myClass.myFunction.getTotal() );

关键字this会返回未定义,为什么会这样?是因为我使用var myClass代替function myClass()吗?

由于

[编辑] 这是JSFiddle http://jsfiddle.net/DarcFiddle/cg7Fk/

3 个答案:

答案 0 :(得分:2)

这是您此时分配给myFunction的对象的范围。

答案 1 :(得分:1)

正如Blender在评论中所说,这不是一个阶级。你想要的可能就是:

var MyClass = function() {
    return {
        globalVar : {
            total : 100
        },
        getTotal : function() {
            return this.globalVar.total;
        }
    };
};

alert(new MyClass().getTotal() );

答案 2 :(得分:0)

this结果只是myFunction所以就像你说myFunction.globalVar.total不存在一样。

如果您愿意,可以使其可重复使用。

function Food(cost) {
    this.getTotal = function () {
        return cost + (cost * 0.05); // add 5%
    };
}

var sandwich = new Food(2.50);

alert( sandwich.getTotal() ); // 2.625

http://jsfiddle.net/thetenfold/HvHxR/


有很多方法可以制作“课程”(可以这么说) 这不是唯一的方法,但这是一个不错的方式。