影響 this 的指向是在於函式的呼叫方法。
函式this的指向: 全域物件window
直接調用函式,函式的 this 會指向 window。
1 2 3 4 5 6 7
| var myName = 'Louisa';
function callName() { var myName = "John"; console.log(this.myName); } callName(); // Louisa
|
函式this的指向: 物件本身
作為物件方法來調用函式this,則會指向此物件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var myName = 'Louisa';
function callName() { var myName = "John"; console.log(this.myName); }
var family = { myName: 'Lee', callname: callName, Ming: { myName: ' Ming', callname: callName } }
family.callname(); // Lee family.Ming.callname(); // Ming
|
間接執行函式,this的指向 : 全域物件window
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var myName = 'Louisa';
function callName() { var myName = "John"; console.log(this.myName); }
var family = { myName: 'Lee', callname: callName, Ming: { myName: ' Ming', callname: callName } }
var call_name = family.callname; call_name(); // Louisa
|
函式中的函式的this指向: 全域物件window
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var myName = 'Louisa';
function callName() { var myName = "John"; console.log(this.myName); }
var family = { myName: 'Fido', rename: function () { setTimeout(function () { console.log(this.myName); }, 1000); } }
family.rename(); // Louisa
|
函式中的函式的this指向 : 指回物件本身的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var myName = 'Louisa';
function callName() { var myName = "John"; console.log(this.myName); }
var family = { myName: 'Fido', rename: function () { var self = this; setTimeout(function () { console.log(self.myName); }, 1000); } }
family.rename(); // Fido
|