javascript:在函数的上下文中定义“this”

时间:2011-04-18 18:54:45

标签: javascript jquery

当jQuery调用函数作为引发事件的事件处理程序时,jQuery以某种方式能够在它调用的函数的上下文中定义“this”。在下面的示例中,jQuery将其定义为单击的dom元素。

<input id="someButton" type="button" value="click me!"/>
<script type="text/javascript">
     $("#someButton").click(EventHandler);
     function EventHandler() 
     {
          alert($(this).attr("id")); //This raises an alert message "someButton"
     }
</script>

jQuery如何做到这一点?我想为我自己的自定义框架复制这种行为。

5 个答案:

答案 0 :(得分:3)

Function有两种方法可供您使用:callapply。使用这两个方法,将要用于this的对象作为第一个参数传递。使用call,其他参数将逐个传递:

functionName.call(this, arg1, arg2);

使用apply,传入一个参数数组:

functionName.apply(this, [arg1, arg1]);

或者,您可以传递一个实际的参数对象:

function someFunction ()
{
    functionName.apply(this, this.arguments);
}

答案 1 :(得分:2)

您可以使用callapply JavaScript方法:

function myFunction() {
   // you want "this" to be your element
}

var element = SOMEDOMELEMENT;

myFunction.call(element, /* add other comma-separated arguments here, if any */);

myFunction.apply(element, /* add an array of arguments here, if any */);

当使用call和apply时,它会将函数内的上下文(this)更改为您想要的任何元素。

答案 2 :(得分:0)

不确定jQuery使用的是什么,但有一个bind函数:

var regularFunc = function() {
    console.log(this);
};

var boundFunc = regularFunc.bind(123);

regularFunc(); // logs whatever 'this' is at time it is called (e.g. 'window')
boundFunc();   // logs 123 at all times since that is specified to be 'this'

答案 3 :(得分:0)

全部关闭。

Javascript在定义this等变量时会使用闭包。

所以你可以做以下事情:

var myFuncs = {

   func1: function(){
         this.func2 = function() { alert('hello');}
         return this;
   },
   func2: function(){alert('HI')}

}

所以,如果你这样做:

myFuncs.func1().func2(); // alerts 'hello'

,而:

myFuncs.func2(); // alerts 'HI'

答案 4 :(得分:0)

普通的旧javascript / html也可以。

<button id='something' onclick='alert(this.id);'>Click me</button>