日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

谈谈我对Javascript中This对象的理解

發布時間:2023/12/10 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谈谈我对Javascript中This对象的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

this 指針的隱式賦值

this總是指向調用該方法的對象;

在事件中,this指向觸發這個事件的對象,特殊的是,IE中的attachEvent中的this總是指向全局對象Window

?

顯示操縱 this 指針

Javascript引擎通過以下兩種方式允許我們顯式指定this指針指代的對象:

1. 通過new操作符,Javascript引擎會將this指針返回給被賦值的變量。

2. 通過Function.apply或者Function.call或者Function.bind的原型方法,我們可以將this指針指代的對象以參數的形式傳入,這個時候,函數內部使用的this指針就是傳入的參數。

?

閉包中的 this 對象

this對象是在運行的時候基于函數的執行環境綁定的:在全局函數中,this等于window,而當函數被作為某個對象的方法調用時,this等于那個對象。不過,匿名函數的執行環境具有全局性,因此其this對象通常指向window。但有時候由于編寫閉包的方式不同,這一點可能不會那么明顯。下面來看一個例子:

var name = "The Window";var obj = {name : "My Obj",getNameFunc : function(){return function(){return this.name;};} }alert(obj.getNameFunc()()); //"The Window" (在非嚴格模式下)

以上代碼先創建了一個全局變量 name,又創建了一個包含 name 屬性的對象。這個對象還包含一個方法——getNameFunc(),它返回一個匿名函數,而匿名函數又返回 this.name。為什么這個匿名函數沒有取得其外部作用于的 this 對象呢?每個函數在被調用時,其活動對象都會自動取得兩個特殊變量: this 和 arguments。內部函數在搜索這兩個變量時,只會搜索到其活動對象為止,因此永遠不可能直接訪問外部函數中的這兩個變量。不過,把外部作用于中德 this 對象保存在一個閉包能夠訪問到的變量里,就可以讓閉包訪問該對象了,如下所示:

var name = "The Window";var obj = {name : "My Obj",getNameFunc : function(){var that = this;return function(){return that.name;};} }alert(obj.getNameFunc()()); //"My Object"

?

在幾種特殊情況下, this 的值可能會意外地改變。比如,下面的代碼是修改前面例子的結果:

var name = "The Window";var obj = {name : "My Obj",getNameFunc : function(){return this.name;} } obj.getNameFunc(); //"My Object" (obj.getName)Func(); //"My Object" (obj.getNameFunc = obj.getNameFunc)(); //"The Window" ,在非嚴格模式下

第三行代碼先執行了一條賦值語句,然后再調用賦值后的結果。因為這個賦值表達式的值是函數本身,所以 this 的值不能得到維持(沒有引用 obj,當前活動對象是 window),結果就返回了"The Window"。

?

轉載于:https://www.cnblogs.com/ppJuan/p/6696321.html

總結

以上是生活随笔為你收集整理的谈谈我对Javascript中This对象的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。