在JavaScript对象内的函数内引用函数

时间:2011-09-27 10:30:18

标签: javascript jquery

var Page = {
    data: null,
    Load: function () {
        this.Populate;
    },
    Populate: function () {
    }
};

$(document).ready(Page.Load);
  1. 为什么我不能在Page.Load中引用ready()作为函数,例如.ready(Page.Load())
  2. 为什么我不能从加载函数调用this.Populate(),我只是this.Populate()不是函数。

5 个答案:

答案 0 :(得分:4)

  

为什么我不能将Page.Load引用为ready()中的函数,例如.ready(Page.Load())

坚持()结束调用一个函数。您想要传递函数本身,而不是它的返回值。 (ready函数将调用您稍后传递给它的内容。

  

为什么我不能从Load函数调用this.Populate(),我只是得到这个.Populate()不是函数

有两个原因。

首先,你永远不会实际调用Populate函数。改为:

this.Populate()

第二:因为你从对象中分离了Load函数,所以this在被调用时不是Page

请改为:

$(document).ready(function () { Page.Load() });

答案 1 :(得分:3)

函数调用的格式应为function_name()(括号!)。函数引用应为function_name(不带括号)。这段代码可以使用:

var Page = {
    data: null,
    Load: function () {
        Page.Populate(); //PARENTHESES
    },
    Populate: function () {
    }
};

$(document).ready(Page.Load);//NO PARENTHESES

$(document).ready是一个函数,它希望函数为参数1.如果使用Page.Load(),则执行函数Page.Load()并传递返回值(undefined,在这种情况下)到$(document).ready

答案 2 :(得分:3)

您的代码中存在两个问题。

首先,正如Rob所说,你实际上并没有在Populate()中调用Load()方法。你需要添加括号来做到这一点。

其次,this中的Populate()关键字未引用Page对象。您可以使用$.proxy()Page对象设置为方法调用的上下文:

var Page = {
    data: null,
    Load: function() {
        this.Populate();
    },
    Populate: function() {
    }
};

$(document).ready($.proxy(Page.Load, Page));

答案 3 :(得分:2)

你可以通过将对象包装在这样的函数中来实现它:

var Page = (function () {
    var that = {
        data: null,
        Load: function () {
            that.Populate(); 
        },
        Populate: function () {
            alert("Test");
        }
    };
    return that;
})(); // Execute the function immediately to return 'that'

$(document).ready(Page.Load);

这样你可以在方法之间调用,因为你有对象的引用。

JSBin Example

答案 4 :(得分:0)

您正在调用Page.Load函数。但更具体地说,你正在调用Page.Load设置的函数(因为.ready()的参数只是一个简单的值);你在页面上调用,所以'this'不会重置为指向Page对象。

这会更好用:

$(document).ready(function() {
    Page.Load();
});