JavaScript之this指向

Js中this是在運行的時候進行綁定的,這是Js中this關鍵字具有多重含義的本質緣由。因此,Js中的this能夠是全局對象、當前對象或者是任意對象。這徹底取決於函數的調用方式,而js中函數的調用有如下幾種方式:數組

  • 做爲對象方法調用
  • 做爲函數調用
  • 做爲構造函數調用
  • 使用apply或call調用

根據如下判斷,判別this分別指向什麼:
1.函數調用是用new進行調用的嗎?若是是,則this指向新建立的對象,不然進行下一步判斷
2.判斷該函數是不是用dot(.)進行調用的,若是是的話,那麼this指向dot(.)以前的對象;不然this指向全局對象window.app

四種調用方式中this的指向函數

函數調用模式中this指全局對象(window)學習

var f1 = function() {
            alert("這個是函數調用");
            alert(this);//window
          };
          f1();

方法調用
 由對象調用方法(當對象爲null的時候,函數進行函數調用模式,當對象不爲null的時候,函數實現方法調用模式)
 在方法調用模式中 this 表示當前對象this

var o = {name:"小明"};
      o.say = function() {
        alert(this.name);//小明
        alert(this);//o
      };
      o.say();

任何一個函數放在new 後面就是構造函數,構造函數的this是構造函數返回的對象,構造函數的return發生變化,若是返回的是對象,直接返回,不然返回建立出來的對象
code

  var Person = function(n) {
    this.name = n;
     return {

     name:"男",
     get:function(){
         console.log(this.name);
     };
    // return 123;
  }
  var p = new Person();

函數的apply調用模式和call調用模式
語法:
  函數名.apply(對象, [參數數組]);
   函數名.call(對象, 參數列表);
對象

  var func = function() {
    this.name = "小明";
    this.say = function(){alert(this.name + "學習好");};
  };
  func.apply(null); // 等價於 func();
相關文章
相關標籤/搜索