Javascript - 在对象方法中使用它

时间:2014-03-17 15:32:45

标签: javascript oop

我的javascript类定义如下:

function C_page() {
    this.errors = [];

    function void_log_str(L_message) {
        this.errors.push(L_message);
    }

    //and more code...
}

问题是void_log_str范围用作此方法。有没有办法去顶级呢?

5 个答案:

答案 0 :(得分:0)

function C_page() {
    this.errors = [];
    var that = this;

    function void_log_str(L_message) {
        that.errors.push(L_message);
    }

    //and more code...
}

我会做那样的事。

答案 1 :(得分:0)

您可以使用范围 " var _this = this;"然后在函数体中引用_this。 或者你可以"绑定"对此的功能,例如使用Function.prototype.bind(如果您的浏览器没有这个,则使用polyfill)

答案 2 :(得分:0)

每次调用函数时,您都可以使用call()apply()来选择您希望this拥有的值;

function C_page() {
    this.errors = [];

    function void_log_str(L_message) {
        this.errors.push(L_message);
    }

    void_log_str.call(this, "value_of_l_message");
}

...或者您可以使用bind()强制实现此值(这样做的好处就是您在定义中执行此操作,而不是在调用中执行此操作);

function C_page() {
    this.errors = [];

    var void_log_str = function(L_message) {
        this.errors.push(L_message);
    }.bind(this);


    void_log_str("value of l message");
    //and more code...
}

...或者您可以使用var that = this方法;

function C_page() {
    var that = this;
    this.errors = [];

    function void_log_str(L_message) {
        that.errors.push(L_message);
    }

    void_log_str("value of l message");
    //and more code...
}

答案 3 :(得分:0)

这将有效:

function C_page() {
    var context = this;
    this.errors = [];

    function void_log_str(L_message) {
        context.errors.push(L_message);
    }

    //and more code...
}

答案 4 :(得分:0)

不要使用根据函数调用方式而改变的this context,而是使用直接引用数组的作用域中的变量:

function C_page() {
    var errors = this.errors = [];

    function void_log_str(L_message) {
        errors.push(L_message);
    }

    //and more code...
}

您也可以使用bind

function C_page() {
    this.errors = [];

    var int_log_str = Array.prototype.push.bind(this.errors);

    //and more code...
}

另请参阅How to access the correct `this` context inside a callback?了解处理this的更多方法。