国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

Javascript this 的一些學(xué)習(xí)總結(jié)

2024-05-06 14:21:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
1.1.1 摘要
相信有C++、C#或Java等編程經(jīng)驗(yàn)的各位,對(duì)于this關(guān)鍵字再熟悉不過(guò)了。由于Javascript是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它和C++、C#或Java一樣都包含this關(guān)鍵字,接下來(lái)我們將向大家介紹Javascript中的this關(guān)鍵字。

本文目錄

•全局代碼中的this
•函數(shù)中的this
•引用類(lèi)型
•函數(shù)調(diào)用以及非引用類(lèi)型
•引用類(lèi)型以及this的null值
•函數(shù)作為構(gòu)造器被調(diào)用時(shí)this的值
•手動(dòng)設(shè)置函數(shù)調(diào)用時(shí)this的值

1.1.2 正文


由于許多面向?qū)ο蟮木幊陶Z(yǔ)言都包含this關(guān)鍵字,我們會(huì)很自然地把this和面向?qū)ο蟮木幊谭绞铰?lián)系在一起,this通常指向利用構(gòu)造器新創(chuàng)建出來(lái)的對(duì)象。而在ECMAScript中,this不僅僅只用來(lái)表示創(chuàng)建出來(lái)的對(duì)象,也是執(zhí)行上下文的一個(gè)屬性:
代碼如下:
activeExecutionContext = {
// Variable object.
VO: {...},
this: thisValue
};

全局代碼中的this
代碼如下:
// Global scope
// The implicit property of
// the global object
foo1 = "abc";
alert(foo1); // abc

// The explicit property of
// the global object
this.foo2 = "def";
alert(foo2); // def

// The implicit property of
// the global object
var foo3 = "ijk";
alert(foo3); // ijk

前面我們通過(guò)顯式和隱式定義了全局屬性foo1、foo2和foo3,由于this在全局上下文中,所以它的值是全局對(duì)象本身(在瀏覽器中是window object);接下來(lái)我們將介紹函數(shù)中的this。

函數(shù)中的this

當(dāng)this在函數(shù)代碼中,情況就復(fù)雜多了,并且會(huì)引發(fā)很多的問(wèn)題。

函數(shù)代碼中this值的第一個(gè)特性(同時(shí)也是最主要的特性)就是:它并非靜態(tài)的綁定在函數(shù)上。

正如此前提到的,this的值是在進(jìn)入執(zhí)行上下文(Excution context)的階段確定的,并且在函數(shù)代碼中的話,其值每次都不盡相同。

然而,一旦進(jìn)入執(zhí)行代碼階段,其值就不能改變了。如果要想給this賦一個(gè)新的值是不可能的,因?yàn)樵谀菚r(shí)this根本就不是變量了。

接下來(lái),我們通過(guò)具體的例子說(shuō)明函數(shù)中的this。

首先我們定義兩個(gè)對(duì)象foo和person,foo包含一個(gè)屬性name,而person包含屬性name和方法say(),具體的定義如下:
代碼如下:
// Defines foo object.
var foo = {
name: "Foo"
};

// Defines person object.
var person = {
name: "JK_Rush",
say: function() {
alert(this === person);
alert("My name is " + this.name);
}
};

person.say(); // My name is JK_Rush

// foo and person object refer to
// the same function say
foo.say = person.say;

foo.say(); // My name is Foo.

通過(guò)上面的代碼,我們發(fā)現(xiàn)調(diào)用person的say()方法時(shí),this指向person對(duì)象,當(dāng)通過(guò)賦值方式使得foo的say()方法指向peson中的say()方法時(shí)。我們調(diào)用foo的say()方法,發(fā)現(xiàn)this不是指向person對(duì)象,而不是指向foo對(duì)象,這究竟是什么原因呢?
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 大同县| 彰化市| 临夏县| 万年县| 静安区| 潞西市| 化德县| 定襄县| 怀远县| 宝应县| 绩溪县| 皋兰县| 丹东市| 汽车| 清原| 定襄县| 上思县| 新蔡县| 阿城市| 柯坪县| 南充市| 庆安县| 格尔木市| 白玉县| 扬中市| 十堰市| 大化| 阿拉善盟| 乐山市| 竹北市| 乌拉特中旗| 延安市| 玉田县| 满城县| 延长县| 沁阳市| 阜阳市| 尼木县| 定陶县| 迁安市| 通河县|