首页  >  问答  >  正文

javascript - 请问下这里的 call 和 apply 怎么理解

最近项目中用到knockoutjs,在网上搜到了一个做分页模板的文章 http://www.cnblogs.com/zemin-wang/p/dotNet-Javascript-Knockout.html?utm_source=tuicool&utm_medium=referral#commentform
apply 和 call 这里不太理解,求大神指导下

paginationViewModel.apply(self, [10, function (page, pageHandler) {
            debugger
            self.loading(true);
            $.ajax({
                url: "dataHandler.ashx",
                cache: false,
                data: {
                    pageIndex: page,
                    pageSize: self.pageSize
                },
                success: function (data) {
                    if (typeof data === "string") {
                        data = $.parseJSON(data);
                    }
                    pageHandler.call(self, data);
                    self.items(data.list);
                    self.loading(false);
                }
            });
        }]);
self.goToPage = function (page) {
        if (typeof self.goToPageHandler == "function") {
            self.goToPageHandler.call(self, page - 1, function (data) {
                debugger
                self.pageCount(Math.ceil(data.count / self.pageSize));
                self.currentPage(page);
                self.jumpPage(null);
                self.caculatePages();
                self.total(data.count);
            });

        };
    };

ps:如果能有个图来表示this指针的指向再好不过了

ringa_leeringa_lee2767 天前814

全部回复(5)我来回复

  • PHP中文网

    PHP中文网2017-04-11 11:20:08

    fn.call(this, a, b, c); 相当于 this.fn(a, b, c) (相当于仿佛 fn 被赋值到了 this 上,当然实际上是没有的)

    fn.apply(this, [a, b, c]) 相当于 fn.call(this, a, b, c)

    apply 的意义就在于,可以动态地对参数进行修改

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-11 11:20:08

    http://stackoverflow.com/questions/1986896/what-is-the-difference-between-call-and-apply

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 11:20:08

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

    ...语法与 call() 方法的语法几乎完全相同,唯一的区别在于,call()方法接受的是一个参数列表,而 apply()方法接受的是一个包含多个参数的数组(或类数组对象)。

    回复
    0
  • ringa_lee

    ringa_lee2017-04-11 11:20:08

    主要用于切换上下文

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-11 11:20:08

    其实就是静态调用,self::send()

    回复
    0
  • 取消回复