Javascript中的this是一個(gè)非常重要的對(duì)象,用于表示當(dāng)前執(zhí)行代碼的上下文環(huán)境。它的作用域取決于它在哪里被調(diào)用,這種靈活性使得this成為Javascript開(kāi)發(fā)中的一個(gè)強(qiáng)大工具。本文將通過(guò)一些舉例來(lái)解釋Javascript中this對(duì)象的作用域。
在一個(gè)簡(jiǎn)單的例子中,我們可以看到this對(duì)象的作用域如何隨著其所在的環(huán)境而改變。首先,我們定義一個(gè)對(duì)象Person,它有一個(gè)屬性name并且有一個(gè)叫introduce的方法。
這個(gè)例子中,this指向當(dāng)前的Person實(shí)例。當(dāng)我們調(diào)用john.introduce()時(shí),實(shí)際上是調(diào)用了john這個(gè)對(duì)象的introduce方法,所以this指向了john。同理,當(dāng)我們調(diào)用jane.introduce()時(shí),this指向了jane。
然而,事情并不總是這么簡(jiǎn)單,當(dāng)我們?cè)谇短缀瘮?shù)中使用this時(shí),作用域就不是那么明確了。讓我們看下面這個(gè)例子。
在這個(gè)例子中,我們嘗試打印一個(gè)學(xué)生的所有課程,但當(dāng)我們執(zhí)行代碼時(shí)發(fā)現(xiàn),控制臺(tái)輸出undefined。這是因?yàn)槲覀冊(cè)谇短椎暮瘮?shù)中使用了this,而這個(gè)函數(shù)的作用域已經(jīng)改變了。
為了使這個(gè)例子工作,我們需要在嵌套函數(shù)之前,將this保存到一個(gè)變量中,如下所示。
現(xiàn)在,變量self保存了外部this的值,因此我們可以在嵌套函數(shù)中訪問(wèn)它。
在Javascript中,this的作用域取決于它如何被調(diào)用。當(dāng)我們?cè)谌汁h(huán)境中使用this時(shí),它指的是全局對(duì)象。例如:
在這個(gè)例子中,當(dāng)我們使用this時(shí),它指的是全局對(duì)象window。即使我們?cè)谝粋€(gè)函數(shù)中使用this,它也指向全局對(duì)象,如果函數(shù)沒(méi)有被定義為一個(gè)對(duì)象的方法的話。
盡管this在Javascript中可能有一些令人困惑的地方,但它是一種非常有用的工具。當(dāng)我們了解this的作用域時(shí),在代碼中使用它將會(huì)更加輕松自如。
在一個(gè)簡(jiǎn)單的例子中,我們可以看到this對(duì)象的作用域如何隨著其所在的環(huán)境而改變。首先,我們定義一個(gè)對(duì)象Person,它有一個(gè)屬性name并且有一個(gè)叫introduce的方法。
function Person(name) {
this.name = name;
}
Person.prototype.introduce = function() {
console.log("Hello, my name is " + this.name);
}
var john = new Person("John");
var jane = new Person("Jane");
john.introduce(); // "Hello, my name is John"
jane.introduce(); // "Hello, my name is Jane"
這個(gè)例子中,this指向當(dāng)前的Person實(shí)例。當(dāng)我們調(diào)用john.introduce()時(shí),實(shí)際上是調(diào)用了john這個(gè)對(duì)象的introduce方法,所以this指向了john。同理,當(dāng)我們調(diào)用jane.introduce()時(shí),this指向了jane。
然而,事情并不總是這么簡(jiǎn)單,當(dāng)我們?cè)谇短缀瘮?shù)中使用this時(shí),作用域就不是那么明確了。讓我們看下面這個(gè)例子。
var student = {
name: "Bob",
courses: ["Math", "Science"],
showCourses: function() {
this.courses.forEach(function(course) {
console.log(this.name + " is enrolled in " + course);
})
}
}
student.showCourses();
在這個(gè)例子中,我們嘗試打印一個(gè)學(xué)生的所有課程,但當(dāng)我們執(zhí)行代碼時(shí)發(fā)現(xiàn),控制臺(tái)輸出undefined。這是因?yàn)槲覀冊(cè)谇短椎暮瘮?shù)中使用了this,而這個(gè)函數(shù)的作用域已經(jīng)改變了。
為了使這個(gè)例子工作,我們需要在嵌套函數(shù)之前,將this保存到一個(gè)變量中,如下所示。
var student = {
name: "Bob",
courses: ["Math", "Science"],
showCourses: function() {
var self = this;
this.courses.forEach(function(course) {
console.log(self.name + " is enrolled in " + course);
})
}
}
student.showCourses();
現(xiàn)在,變量self保存了外部this的值,因此我們可以在嵌套函數(shù)中訪問(wèn)它。
在Javascript中,this的作用域取決于它如何被調(diào)用。當(dāng)我們?cè)谌汁h(huán)境中使用this時(shí),它指的是全局對(duì)象。例如:
console.log(this === window); // true
function test() {
console.log(this === window); // true
}
test();
在這個(gè)例子中,當(dāng)我們使用this時(shí),它指的是全局對(duì)象window。即使我們?cè)谝粋€(gè)函數(shù)中使用this,它也指向全局對(duì)象,如果函數(shù)沒(méi)有被定義為一個(gè)對(duì)象的方法的話。
盡管this在Javascript中可能有一些令人困惑的地方,但它是一種非常有用的工具。當(dāng)我們了解this的作用域時(shí),在代碼中使用它將會(huì)更加輕松自如。
上一篇css樣式 透明度
下一篇css樣式 使圖片豎列