JQuery中this的指向详解

JavaScript中的this不总是指向当前对象,函数或类中的this指向与调用这个函数的对象以及上下文环境是息息相关的。

如在全局作用域调用一个含this的对象,此时当前对象的this指向的是window。

为了让this的指向符合自己的意愿,JavaScript提供了两个方法用以改变this的指向,它们是call和apply,当然也有利用闭包来实现的方法。

在Jquery 中的this的指向是怎么样的呢?

一、Ajax回调函数中的this

默认情况下指向AJAX配置对象ajaxSettings。

在jQuery内部是用s.success代替传入的回调函数去执行的,而success的调用对象就是s,即ajaxSettings对象的缩写。

var socket =
{
    connect: function(host, port)
    {
        alert('Connecting socket server,host:' + host + ',port:' + port);
    }
};

//一个即时通讯类,其中connect方法还将作为AJAX回调函数被调用
function classIm()
{
    this.host = '192.168.1.28';
    this.port = '8080';
    this.connect = function(data)
    {
      socket.connect(this.host, this.port);
    };
}

var IM = new classIm();
$.get('CheckWebLogin.aspx', IM.connect);
//弹出的host与port都是undefined。

如果希望AJAX回调函数代码socket.connect(this.host, this.port)中的this指向类classIm的实例对象IM,或者说是想socket.connect()方法能得到正确的参数值,大致有下面几种方法:

1、设置ajax的context选项

将Ajax回调函数中的this指向对象IM。

$.ajax({
    context:IM,
    type:'get',
    ulr:”page.html”,
    success:IM.connect
})

2、调用$.proxy

改变函数内this的指向

$.get(”page.html”,$.proxy(IM.context,IM))

3、对象实传

直接传对象的正确引用而非this指针

这是最常见的做法,即在类实例化时用一个变量存储对当前对象的引用,在后面的方法中直接使用此变量代替this的使用。注意:这种方法并没有真正改变this的指向。

function classIm()
{
    var self = this;
    this.host = '192.168.1.28';
    this.port = '8080';
    this.connect = function(data)
    {
        socket.connect(self.host, self.port);
    };
}

4、使用apply加闭包

实现真正改变this的指向。

这种方法是很多JavaScript框架的做法。

Function.prototype.Proxy = function(thisObj)
{
    var _method = this;
    return function(data)
    {
        return _method.apply(thisObj,[data]);
       //或者
       return  function()
       {ret _fn.apply(thisObj,arguments);};
    };

}
//调用:
var IM = new classIm();
$.get('CheckWebLogin.aspx', IM.connect.Proxy(IM));

5、添加函数包装器

在匿名回调函数中再调用实际的回调处理函数。不建议使用。

$.get('page.html', function(data){
    IM.connect(data)
});

二、jQuery事件绑定回调函数中的this

指向event.currentTarget,即附着这个函数的DOM对象。

1、可以在函数绑定时传递参数:

$('#a').bind('click'{self:this},this.onClick);

function onClick(event){
  var self=event.data.self;
}

2、可以使用上面的2、3、4、5中方法改变this的指向。

$("#a").click($.proxy(myFun,this));
//或
$("#a").click(myFun.Proxy(this));

到此这篇关于JQuery中this指向的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JQuery this 和 $(this) 的区别

    What is "this"? In many object-oriented programming languages, this (or self) is a keyword which can be used in instance methods to refer to the object on which the currently executing method has been invoked. 复制代码 代码如下: $("#textbox").

  • 通过$(this)使用jQuery包装后的方法或属性

    如果你要使用html元素本身的属性或方法就需要使用this,如果你要使用jQuery包装后的方法或属性就要$(this),一般则有如下的关系. 复制代码 代码如下: $(this)[0] == this; 上文的代码是要使用this的地方是要调用表单form的有reset方法,而这一方法jQuery没有包装支持,所以才有this.reset(),也可以使用$(this)[0].reset(); 关于什么时候使用二者?可以看如下例子: 复制代码 代码如下: <a href="http://s

  • jquery中this的使用说明

    原来js中的this这么好用 复制代码 代码如下: $(document).ready(function(){ var DragElement=null; $("#zz").mousedown(function(){ DragElement=this;//这时this指的就是$("#zz")对象 $(document).mousemove(function(){ 如果直接$(this).css("left")//由于是在mousemove内,这样

  • jQuery AJAX回调函数this指向问题

    如在全局作用域调用一个含this的对象,此时当前对象的this指向的是window.为了让this的指向符合自己的意愿,JavaScript提供了两个方法用以改变this的指向,它们是call和apply,当然也有利用闭包来实现的方法.本文通过一个例子来说明这些问题. 先看一段演示代码,这代码只供演示用,没有实际意义. 复制代码 代码如下: //一个没有实际意义的socket连接对象 var socket = { connect: function(host, port) { alert('Co

  • jQuery 选择方法及$(this)用法实例分析

    本文实例讲述了jQuery 选择方法及$(this)用法.分享给大家供大家参考,具体如下: 选择方法 用方法来选择元素,可以视作$()函数的链式调用,返回仍然是一个jQuery对象 $(function() { //一.根据结果集中元素位置来选择:first(),last(),eq(),slice() //1.选择第一个li $('li').first().css('color','red'); //2.选择最后一个li $('li').last().css('color','red'); //

  • 浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法

    1.JQuery this和$(this)的区别 相信很多刚接触JQuery的人,很多都会对$(this)和this的区别模糊不清,那么这两者有什么区别呢? 首先来看看JQuery中的  $()  这个符号,实际上这个符号在JQuery中相当于JQuery(),即$(this)=jquery();也就是说,这样可以返回一个jquery对象.那么,当你在网页中alert($('#id'));时,会弹出一个[object Object ],这个object对象,也就是jquery对象了. 那么,我们

  • jquery $(this).attr $(this).val方法使用介绍

    $(this).attr(key); 获取节点属性名的值,相当于getAttribute(key)方法 $(this).attr(key, value); 设置节点属性的值,相当于setAttribute(key,value)方法 eg:<div id="w_1" class="widget" diywidgetid="${template.diyWidgetId}"></div> var diywidgetid = $(

  • 详谈jQuery中的this和$(this)

    网上有很多关于jQuery的this和$(this)的介绍,大多数只是理清了this和$(this)的指向,其实它是有应用场所的,不能一概而论在jQuery调用成员函数时,this就是指向dom对象. $(this)指向jQuery对象是无可厚非的,但this就是指向dom对象,这个是因为jQuery做了特殊的处理. 在创建dom的jQuery对象时,jQuery不仅仅为dom创建一个jQuery对象,而且还将dom存储在所创建对象的数组中. 复制代码 代码如下: elem = document

  • jQuery中$this和$(this)的区别介绍(一看就懂)

    // this其实是一个Html 元素. // $this 只是个变量名,加$是为说明其是个jquery对象. // 而$(this)是个转换,将this表示的dom对象转为jquery对象,这样就可以使用jquery提供的方法操作. (function($){ $.fn.hilight = function(options){ debug(this); var defaults = { foreground: 'red', background: 'yellow' }; var opts =

  • 实例讲解JQuery中this和$(this)区别

    平时很少在jquery中用到this.查看代码时发现用到了,就调试出this的值,心想原来如此.还是挺有用的.这里总结一下this与$(this)的区别和使用. $(this)生成的是什么? $()生成的是什么呢?实际上$()=jquery(),就是说返回的是一个jquery的对象. 通常我们为了简便直接使用$().实际上,该函数省略了一个参数context.根据选择器选取匹配的对象即$(selector, context),以jQuery包装集的形式返回. context可以是Dom对象集合或

随机推荐