Jquery第四課 Javascript中this的用法

this關鍵字的使用

在JavaScript中使用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"

JavaScript可以在運行中爲對象動態添加函數,這樣也會導致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,但是後面是函數的參數列表。

本文檔由長沙戴維營教育整理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章