1

我想知道是否有人可以帮助我理解一些对 JS 来说似乎很奇怪的东西?

下面的代码有效。该函数inlineEditEvent.init()被调用,然后t.copy()被正确调用(其中var t = this;)。

但是,如果我用 替换它this.copy(),我会得到错误this.copy is not a function

这里有什么区别?为什么下面的方法有效,但不是上一段中描述的方式?谢谢。

jQuery(function($){

    $(document).ready(function(){inlineEditEvent.init();});

    inlineEditEvent = {

        init : function(){

            var t = this;

            /** Copy the row on click */
            $('#the-list').on('click', '.row-actions a.single-copy', function(){
                return t.copy();
            });

        }, // init

        copy : function(){

            // Do stuff here

        }

    } // inlineEditEvent

});
4

4 回答 4

2

您正在设置tthis(您的init函数)的上下文变量。一旦进入您的点击处理程序,this现在指的是点击处理程序,不再是init函数。因此,this.copy()不是一个函数。

于 2013-07-18T13:24:42.407 回答
1

当您说它var t= this;this指在该上下文中的含义时。稍后,当您尝试引用 this 时,它指的是它,a.single-copy因为那是它所处的新上下文。

于 2013-07-18T13:24:53.763 回答
1

t.copy();出现在与不同的函数var t = this;this每个函数内部的值变化。

于 2013-07-18T13:25:19.943 回答
1

thisthis在职能范围内。这就是为什么您需要设置一个self变量,以便在函数范围内可以访问它。考虑到您使用的是 jQuery,您可以使用$.proxy

$.proxy(function(){
    return this.copy();
},this)
于 2013-07-18T13:25:35.287 回答