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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript中的this

發布時間:2025/5/22 javascript 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript中的this 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

s中的this總是讓人,是js眾所周知的坑之一。
總結一下,this的坑分為5種。
1.全局代碼中的this。
alert(this);//window
全局范圍內this將會全局,在瀏覽器window

2.作為單純函數調用

function foo(x){this.x = x; } foo(99); alert(x);//全局變量x值為99

?

?

這里this指向全局對象,就是window。在嚴格模式中,則undefiend。

3.作為對象的方法調用

var name = "xiaoming"; var person = {name:"xiaohong",hello:function(sth){console.log(this.name + "says" + sth);} } person.hello("hello world");

?

輸出 xiaohong says hello world。this指向person對象,即當前對象。

4.作為構造函數
new Foo();
function Foo(){
this.name = “fooname”;
}
構造函數內部的this指向新創建的對象

5.內部函數

var name = "xiaoming"; var person = {name:"xiaohong",hello:function(sth){var sayhello = function(sth){console.log(this.name + "says" + sth);}sayhello(sth);} } person.hello("hello world");

?

?

在內部函數中,this沒有按預想的綁定到外層函數對象上,而是綁定到了全局對象。這里普 遍被認為是 JavaScript語言的設計錯誤,因為沒有人想讓內部函數中的 this指向全局對象。 一般的處理方式是將 this作為變量保存下來,一般約定為 that或者 self

var name = "xiaoming"; var person = {name:"xiaohong",hello:function(sth){var that = this;var sayhello = function(sth){console.log(that.name + "says" + sth);}sayhello(sth);} } person.hello("hello world");

?

6.使用call和apply設置this?

person.hello.call(person, “world”);
apply和 call類似,只是后面的參數是通過一個數組傳入,而不是分開傳入。兩者的方法定義:
call(thisArg[,arg1,arg2,…]); // 參數列表,arg1,arg2,…
apply(thisArg [,argArray] ); // 參數數組,argArray
兩者都是將某個函數綁定到某個具體對象上使用,自然此時的 this會被顯式的設置為第一 個參數。

我們可能經常會寫這樣的代碼:
$(“#ele”).click=obj.handler;

如果在 handler中用了 this,this會綁定在 obj上么?顯然不是,賦值以后,函數是在回調中執行的,this會綁定到$(“#ele”)元素上。
這邊介紹一個bind方法

var name = "xiaoming";var person = {name:"xiaohong",hello:function(sth){var that = this;var sayhello = function(sth){console.log(that.name + "says" + sth);}sayhello(sth);}}var odiv = document.getElementById("odiv"); odiv.onclick=person.hello.bind(person,"hello world");//xiaohong says hello world

?

bind方法和call/apply方法一樣,不同的就是bind方法不執行,只是拷貝代碼。用這個方法可以改變this指向,this指向的不再是odiv而是person。


web前端/H5/javascript學習群:250777811 歡迎大家關注我的微信號公眾號,公眾號名稱:web前端EDU。掃下面的二維碼或者收藏下面的二維碼關注吧(長按下面的二維碼圖片、并選擇識別圖中的二維碼)

?

?

轉載于:https://www.cnblogs.com/gongyue/p/7954644.html

總結

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

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