为什么JS报告'this.function'不是函数?

时间:2013-07-18 13:23:00

标签: javascript this

我想知道是否有人可以帮我理解一些看似奇怪的东西?

以下代码有效。调用函数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 个答案:

答案 0 :(得分:2)

您将t设置为thisinit函数的)的上下文变量。进入点击处理程序后,this现在指的是点击处理程序,而不是init函数。因此,this.copy()不是函数。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

t.copy();出现在不同的功能var t = this;。每个函数内this的值都会发生变化。

答案 3 :(得分:1)

this指的是函数范围内的this。这就是您需要设置self变量的原因,因此可以在函数范围内访问它。考虑到您正在使用jQuery,您可以使用$.proxy

$.proxy(function(){
    return this.copy();
},this)