1. 程式人生 > 其它 >JS學習之this關鍵字上

JS學習之this關鍵字上

技術標籤:筆記javascript

JS學習之this關鍵字–上

1.this關鍵字的含義:

this關鍵字是一個非常重要的語法點.毫不誇張地說,不理解它的含義,大部分開發任務都無法完成.

this可以用在建構函式之中,表示例項物件.除此之外,this還可以用在別的場合.但不管是什麼場合,this都有一個共同點:它總是返回一個物件.

簡單說:this就是屬性或方法"當前"所在的物件.

this.property

上面程式碼中,this就代表property屬性當前所在的物件.

下面是一個實際的例子

var person = {
  name: '張三',
  describe:
function () { return '姓名:'+ this.name; } }; person.describe() // "姓名:張三"

上面程式碼中,this.name表示屬性所在的那個物件.由於this.name是在describe方法中呼叫,而describe方法所在的當前物件是person,因此this指向person ,this.name就是person.name.

由於物件的屬性可以賦給另一個物件,所以屬性所在的當前物件是可變的,即this的指向是可變的.

var A = {
  name: '張三',
  describe: function
() { return '姓名:'+ this.name; } }; var B = { name: '李四' }; B.describe = A.describe; B.describe() // "姓名:李四"

上面程式碼中,A.describe屬性被賦給B,於是B.describe技術表示describe 方法所在的當前物件是B,所以this.name就指向B.name. 稍稍重構這個例子 this的動態指向就能看的更清楚.

function f() {
  return '姓名:'+ this.name;
}

var A = {
  name:
'張三', describe: f }; var B = { name: '李四', describe: f }; A.describe() // "姓名:張三" B.describe() // "姓名:李四"

上面程式碼中,函式f內部使用了this關鍵字,隨著f所在的物件不同,this的指向也不同.

只要函式被賦給另一個變數,this的指向就會變.

var A = {
  name: '張三',
  describe: function () {
    return '姓名:'+ this.name;
  }
};

var name = '李四';
var f = A.describe;
f() // "姓名:李四"

上面程式碼中,A.describe被賦值給變數f,內部的this就會指向f執行時所在的物件(本例是頂層物件)

再看一個網頁程式設計的例子

<input type="text" name="age" size=3 onChange="validate(this, 18, 99);">

<script>
function validate(obj, lowval, hival){
  if ((obj.value < lowval) || (obj.value > hival))
    console.log('Invalid Value!');
}
</script>

上面程式碼是一個文字輸入框,每當使用者輸入一個值,就會呼叫onChange回撥函式,驗證這個值是否在指定範圍.瀏覽器會向回撥函式傳入當前物件,因此this就代表傳入當前物件(即文字框),然後就可以從this.value上面讀到使用者的輸入值.

總結一下: js語言中,一切皆物件,執行環境也是物件,所以函式都是在某個物件之中執行,this就是函式執行時所在的物件(環境).這本來並不會讓使用者糊塗,但是js支援執行環境動態切換,也就是說,this的指向是動態的,沒有辦法事先確定到底指向哪個物件.