search

Home  >  Q&A  >  body text

javascript - this在jquery里有哪几种常用写法?


$(this)[hasSelected?"removeClass":"addClass"]('selected')
等价于:
$(this).removeClass('selected');
或者
$(this).addClass('selected');


为什么$(this)后面可以加[]数组?,$(this)的常用写法一般用几种?这块不是很理解!

PHP中文网PHP中文网2823 days ago328

reply all(5)I'll reply

  • 怪我咯

    怪我咯2017-04-10 17:13:46

    你要把$(this)看成一个整体,执行后的结果,是一个经过jquery转换的html对象,后面加的[],不是数组,而是取出这个对象的属性;
    比如:

    var obj={a:1,b:2};
    console.info(obj["a"]);//>>>>结果为1
    
    

    明白了么

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 17:13:46

    $(this)就jq对象,你写成$(this)[0]就转成原生对象了,就可以使用原生的方法了。还可以这样写$(this).get(0),$(this).item(0)这些都是转成原生的。$(this).eq(0)仍然是jq的对象。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 17:13:46

    好吧~ 现在才知道还要这种写法
    一般用的就是 后面两种 单独的 class 操作~~
    hasSelected?"removeClass":"addClass" 这是一个3目运算,根据hasSelected的值,执行remove或者add操作

    不用纠结这些比较偏门的写法的 遇到没见过的写法,查下 或者 console 输出下就知道了

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 17:13:46

    首先$(this)是一个jQuery对象,对象会有各种属性和方法。
    removeClass和addClass就是$的方法。

    [] 和 . 都可以访问对象的方法和属性。

    []中可以是js表达式。

    hasSelected?"removeClass":"addClass"

    就是一个表达式,用来决定是访问removeClass方法还是addClass方法。
    本质上和.没有什么区别,只是.不能使用表达式。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 17:13:46

    // this 在 javascript 中,this的值取决与你如何调用这个函数,而不是函数定义所在的位置。函数的调用分为6种情况,也就是this的来源有6种:
        console.log('********************this的使用********************');
        (function () {
    
            // 普通函数调用,this为全局对象或严格模式下是undefined
            (function () {
                function doSomething() {
                    console.log(this);
                }
                function doSomethingOther() {
                    'use strict';
                    console.log(this);
                }
                doSomething();// windows
                doSomethingOther();// undefined
            })();
    
            // 作为对象的方法,this为那个对象
            (function () {
                var obj = {
                    name : 'javascript',
                    dosomething : function () {
                        console.log(this);
                    }
                }
                obj.dosomething();//object
                var fun = obj.dosomething;
                fun();// window
            })();
    
            // new 表达式,this为以该函数为原型的新创建的对象
            (function () {
                function obj() {
                    this.name = 'javascript';
                    this.dosomething = function () {
                        console.log(this);
                    }
                }
                var oObj = new obj();
                 oObj.dosomething();// obj
            })();
    
            // 使用 apply/call指定 this
            (function () {
                function obj() {
                    this.name = 'javascript';
                    this.dosomething = function (name,age,tall) {
                        console.log(this);
                        console.log([name,age,tall]);
                    }
                }
                function objTwo(name) {
                    this.name = name;
                }
                var oObj     = new obj();
                var oObjTwo = new objTwo('php');
                 oObj.dosomething.call(oObjTwo,'php','25','157');// objTwo 
                 oObj.dosomething.apply(oObjTwo,['sql','23','163']);// objTwo 
            })();
    
            // 用bind绑定固定的this        
            (function () {
                function obj() {
                    this.name = 'javascript';
                    this.dosomething = function () {
                        console.log(this);
                    }.bind(this);// 绑定this
                }
                function objTwo(name) {
                    this.name = name;
                }
                var oObj     = new obj();
                var oObjTwo = new objTwo('php');
                 oObj.dosomething.call(oObjTwo);// obj
            })();
    
            // 事件处理函数中的this是当前的触发事件的DOM元素(event.currentTarget)
        })();

    reply
    0
  • Cancelreply