这个关键字和函数范围在javascript中

时间:2017-02-03 08:07:36

标签: javascript

我有以下代码(简化)

var Page = new UI('page.html');

Page.onLoad = function(html){

    this.name = 'Page 1';
    Util.test(this.run);

};

Page.run = function(){

    console.log(this.name); // undefined
    console.log(Page.name); // correct

};

var Util = function(){};

Util.prototype.test = function(callback){

    // when finished run the callback
    callback();

};

我的问题是,如果执行离开对象然后返回,我为什么不能使用this关键字?请解释我应该更改哪些内容才能再次访问this

2 个答案:

答案 0 :(得分:0)

文章的顶部引用了关于'这个'的其他帖子,所以,我想我只是提供代码。如果您阅读了其他帖子和其中链接的文章,您应该能够遵循此代码。

function UI(html) {
    this.name = html;
}

UI.prototype = {

    onLoad: function () {
        util.test(this);
    },

    run: function () {
        console.log(this.name);
    }
}

var util = (function () {
    return {
        test: function (ui) {
            if (ui && ui.run) {
                ui.run();
            }
        }
    }
})();

var page = new UI("index.html");

答案 1 :(得分:0)

您可以将“this”绑定到函数运行,就像这样。

Page.onLoad = function(html){

    this.name = 'Page 1';
    Util.test(this.run.bind(this));

};

您可以找到有关“bind”功能的更多信息。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/bind