|
|
|
|
|
JavaScript面試時(shí),this
是必考的題目,因此有必要熟練掌握this
這個(gè)知識(shí)點(diǎn)。在前面,我整理了6個(gè)關(guān)于this關(guān)鍵字的面試問(wèn)題,本文中,再次通過(guò)5道練習(xí)題,學(xué)習(xí)this
的使用。
題目1:
請(qǐng)問(wèn),以下的getName
執(zhí)行結(jié)果為:
function getName() {
console.log(this.myName);
}
var myName = '全域';
// 主要程序代碼
var Ming = {
myName: '小明',
getName: getName
};
Ming.getName();
.
.
.
.
.
.
.
本題答案為2. '小明',請(qǐng)記住一個(gè)概念,傳統(tǒng)函數(shù)如何定義不會(huì)影響this
的指向,會(huì)影響指向的只有調(diào)用方式,在此是在 Ming
下調(diào)用 getName
的方法,因此this
會(huì)指向Ming
。
題目2:
請(qǐng)問(wèn),以下的getName
執(zhí)行結(jié)果為:
var Ming = {
myName: '小明',
getName: function() {
console.log(this.myName);
}
};
Ming.getName();
.
.
.
.
.
.
.
這題將 getName
函數(shù)直接定義在 Ming
的對(duì)象下,概念也與先前相同,不管如何定義,直接看是如何調(diào)用,所以本題結(jié)果依然是2. '小明'。
題目3:
請(qǐng)問(wèn),以下的getName
執(zhí)行結(jié)果為:
function getName() {
console.log(this.myName);
}
var myName = '全域';
// 主要程序代碼
var Ming = {
myName: '小明',
fn: function() {
getName();
}
};
Ming.fn();
.
.
.
.
.
.
.
這題在外層調(diào)用 fn()
方法,內(nèi)部再“直接調(diào)用getName
函數(shù)”,所以函數(shù)的 this
是直接由 getName();
這個(gè)調(diào)用方式而定(請(qǐng)注意,在此調(diào)用的前方?jīng)]有任何的對(duì)象),這種調(diào)用方式會(huì)稱為“simple call”(簡(jiǎn)單調(diào)用),this
的指向?yàn)?code>window,結(jié)果會(huì)是1. '全域'。
題目4:
請(qǐng)問(wèn),以下的getName 執(zhí)行結(jié)果為:
function getName() {
console.log(this.myName);
}
var myName = '全域';
// 主要程序代碼
var Ming = {
myName: '小明',
family: {
myName: '小明家',
getName: getName
}
};
Ming.family.getName();
.
.
.
.
.
.
.
本題是 “對(duì)象的方法調(diào)用”,只要檢視 getName
調(diào)用時(shí)前方的對(duì)象是什么就可確認(rèn) this
的指向(family
對(duì)象),因此this
指向?yàn)?code>family 結(jié)果為3. '小明家'。
題目5:
請(qǐng)問(wèn),以下的執(zhí)行結(jié)果為:
var myName = '全域';
// 主要程序代碼
var Ming = {
myName: '小明',
fn: function() {
setTimeout(function() {
console.log(this.myName);
}, 0);
}
};
Ming.fn();
.
.
.
.
.
.
.
本題的結(jié)果為:1.'全域'
這題算是許多新手會(huì)遇到的錯(cuò)誤,在對(duì)象內(nèi)調(diào)用時(shí)如果出現(xiàn)立即函數(shù)、回調(diào)函數(shù)(callback function)結(jié)果會(huì)有什么變化?絕大多數(shù)的情況下這類型都會(huì)指向window
,所以不建議在此類型下直接調(diào)用this
。
總結(jié)
本文通過(guò)5道練習(xí)題,都是簡(jiǎn)單的概念題,沒(méi)有復(fù)雜的邏輯及語(yǔ)法,希望通過(guò)本文的習(xí)題練習(xí),你能更好的掌握this
這個(gè)知識(shí)點(diǎn)。除了本文介紹的,你還可以看看關(guān)于this關(guān)鍵字的6個(gè)面試問(wèn)題。
相關(guān)文章