Jquery第四课 Javascript中this的用法

页面导航:首页 > 网络编程 > JavaScript > Jquery第四课 Javascript中this的用法

Jquery第四课 Javascript中this的用法

来源: 作者: 时间:2016-02-02 09:59 【

this关键字的使用在JavaScript中使用this关键字表示调用方法的对象,这与大部分面向对象语言是一样的。但是由于call、apply、bind等函数的影响,我们可以改变this所代指的对象。使用call或

this关键字的使用

在Script中使用this关键字表示调用方法的对象,这与大部分面向对象语言是一样的。但是由于callapplybind等函数的影响,我们可以改变this所代指的对象。

  • 使用call或者apply调用的函数中,this代指传入的第一个参数对象,如果传入null或者undefined,则表示全局对象(window)。
  • 通过对象调用函数(方法),函数中的this表示调用该函数的对象。
  • 单独调用的函数中this表示全局对象。
    var myObject = {
        sayHello: function() {
            console.log(Hi, my name is  + this.myName);
        },
        myName: Rebecca
    };
    
    var secondObject = {
        myName: Colin
    };
    
    myObject.sayHello();    //Hi, my name is Rebecca
    myObject.sayHello.call(secondObject);   //Hi, my name is Colin
    
    var myName = the global object;
    var sayHello = function() {
        console.log(Hi, my name is  + this.myName);
    };
    var myObject = {
        myName = Rebecca
    };
    var myObjectHello = sayHello.bind(myObject);
    
    sayHello(); //Hi, my name is the global object
    myObjectHello(); //Hi, my name is Rebecca
    

    可以在运行中为对象动态添加函数,这样也会导致this代指的对象发生变化。

    var myName = the global object;
    var sayHello = function() {
        console.log(Hi, my name is  + this.myName);
    };
    var myObject = {
        myName: Rebecca
    };
    var secondObject = {
        myName: Colin
    };
    
    myObject.sayHello = sayHello;
    secondObject.sayHello = sayHello;
    
    sayHello(); //Hi, my name is the global object
    myObject.sayHello(); //Hi, my name is Rebecca
    secondObject.sayHello(); //Hi, my name is Colin
    

    还有,不能直接给处于较深的名字空间的函数增加短引用,会导致this变为全局对象,但是可以对它所处的对象设置短引用。

    var myNamespace = {
        myObject: {
            sayHello: function() {
                console.log(Hi, my name is  + this.name);
            },
            myName: Rebecca
        }
    };
    
    var hello = myNamespace.myObject.sayHello;
    hello();    //Hi, my name is undefined
    
    var obj = myNamespace.myObject;
    obj.sayHello(); //Hi, my name is Rebecca
    

    Tips

    callapply的区别是,apply接收两个参数:this和函数的参数数组;而call的第一个参数为this,但是后面是函数的参数列表。

     

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<