1. 程式人生 > >關於this的用法,網上看到一個非常好的判斷方法。

關於this的用法,網上看到一個非常好的判斷方法。

ref 不錯 show 表達 == 運行時 error AR code

技術分享圖片

這是網上看見一個判斷this的方法,感覺挺不錯的。this的定義很簡單,它代表函數運行時,自動生成的一個內部對象,只能在函數內部使用。然後this指的是,調用函數的那個對象。基本的就那麽多,然後通過一些例子來提現。

var someone = {
    name: "Bob",
    showName: function(){
        alert(this.name);
    }
};

var other = {
    name: "Tom",
    showName: someone.showName
}

other.showName();  //Tom

首先根據this的決策樹,先判斷是否用new調用。否,是否用dot,也就是點,是那麽這個this將指向other,看showName()的表達式最後是alert(this.name);那麽這個this指向的other,name就是tom。

var name = "Tom";

var Bob = {
    name: "Bob",
    show: function(){
        alert(this.name);
    }
}

var show = Bob.show;
show();  //Tom

還是根據this決策樹,判斷show(),是否new當然否,是否點,否,那麽就指向全局。那麽執行這個函數alert(this.name);這時this指向全局。所以是tom。

前面兩個都說了來個new的

function Point(x,y){ 
    this.x = x; // this ?
    this
.y = y; // this ? } var np=new Point(1,1); np.x;//1 var p=Point(2,2); p.x;//error, p是一個空對象undefined window.x;//2

還是老方法,判斷是new構造的。this指向構造函數,np。得到this.x=1,即np.x=1。

 var point = {
    x : 2,
    y : 2,
    moveTo : function(x, y) {
      var moveX = function(x) {
        this.x = x;
      };

      var moveY = function
(y) { this.y = y; }; moveX(x);//這個this是指向全局的window。因為沒點調用和new調用。雖然前面有point,但是到這步已經沒有了。 moveY(y); } }; point.moveTo(1, 1); console.log(point.x); //==>2 console.log(point.y) //==>2 console.log(x); //==>1 console.log(y); //==>1

這個要稍微復雜一點,之後還有個變行。

var point = { 
x : 0, 
y : 0, 
moveTo : function(x, y) { 
     var that = this; 
    // 內部函數
    var moveX = function(x) { 
    that.x = x; 
    }; 
    // 內部函數
    var moveY = function(y) { 
    that.y = y; 
    } 
    moveX(x); 
    moveY(y); 
    } 
}; 
point.moveTo(1, 1); 
point.x; //==>1 
point.y; //==>1

在執行moveX(x)之前this是指向point的將var that = this; 之後的用that。

http://www.cnblogs.com/isaboy/p/javascript_this.html


關於this的用法,網上看到一個非常好的判斷方法。