關於this的用法,網上看到一個非常好的判斷方法。
阿新 • • 發佈:2018-06-04
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的用法,網上看到一個非常好的判斷方法。