javascript - this在jquery里有哪几种常用写法?
PHP中文网
PHP中文网 2017-04-10 17:11:46
0
5
329

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


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

PHP中文网
PHP中文网

认证高级PHP讲师

reply all(5)
刘奇

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

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

明白了么

小葫芦

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

洪涛

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

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

刘奇

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

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

[]中可以是js表达式。

hasSelected?"removeClass":"addClass"

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

Ty80
// 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)
    })();
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template