JS函數(shù)this的用法實(shí)例分析
本文實(shí)例講述了JS函數(shù)this的用法。分享給大家供大家參考。具體如下:
在js中寫函數(shù)時(shí),很多用到this. this究竟是什么,this是個(gè)關(guān)鍵字,是個(gè)指針,指向執(zhí)行環(huán)境作用域,也稱之為上下文。
先說下函數(shù)吧,個(gè)人理解是函數(shù)是在語言中重復(fù)調(diào)用的代碼塊.
在JS里,把函數(shù)賦值給對(duì)象的屬性時(shí),稱之為方法
如:
var m={}; m.title='title'; m.show=function(){ alert(this.title) } m.show()
就是把函數(shù)作為對(duì)象m的方法來調(diào)用
這樣的話,this指向的就是m這個(gè)對(duì)象.
直接調(diào)函數(shù)名的叫函數(shù):
var a=1212; function show(){ alert(a)//1212 } show()// 1212
在全局環(huán)境里,可以把全局變量理解為window的屬性,全局函數(shù)為window的方法
看下面的例子:
var m ={}; m.id='mmm'; m.show=function(){ alert(this.id); } var a={}; a.id='aaa'; a.show=m.show; a.show(); //aaa a.show=m.show; 先理解這句話,因?yàn)楹瘮?shù)是個(gè)對(duì)象, m.show=function(){ alert(this.id) }
這表達(dá)式相當(dāng)于a.show 與m.show同時(shí)引用指向
function(){ alert(this.id) }
其實(shí)相當(dāng)于
a.show=function(){ alert(this.id) }
所以調(diào)用a.show()時(shí),this指向的是a對(duì)象,
再看以下一個(gè)栗子
var m ={}; m.id='mmm' m.show=function(){ alert(this.id) } var a={} a.id='aaa' a.show=function(){ m.show() }; a.show(); //mmm
所以調(diào)用a.show()時(shí),相當(dāng)于調(diào)用了m.show()的方法,所以this.指向的是m對(duì)象。
再看以下一個(gè)例子,一開始還是不很懂
var color='red'; var app = {}; app.color="green"; app.paint=function(node){ node.style.color=this.color; alert(this.color); } function findNode(callback){ var btn =document.querySelector('.btn'); callback(btn);//傳進(jìn)來, } findNode(app.paint); alert(this.color); //red 而不是green
函數(shù)傳參時(shí),是按值傳參的,而不是引用
所以findNode(app.paint);傳進(jìn)來時(shí),其實(shí)是
function(node){ node.style.color=this.color; alert(this.color); }
的引用,又因?yàn)閒indNode是全局定義的,所以this指向WINDOW OR UNDEFINED;
關(guān)于傳參,按值傳遞過去的
function show(a){ alert(a) }
參數(shù)為基本數(shù)據(jù)類型時(shí)好理解
var b=10; show(b)//alert(10);
至于對(duì)象
var c ={}; c.prop=true; var showProp=function(obj){ obj.prop=false } showProp(c); //c.prop = false
有些人覺得是上面例子是按引用傳參
其實(shí)上面還是按值傳參,showProp(c)把c傳進(jìn)函數(shù)里時(shí),c其實(shí)相當(dāng)于一個(gè)引用, 函數(shù)里對(duì)obj.prop=false,相當(dāng)于對(duì)引用的對(duì)象 改成{prop:false}
再看下面一例子
var c ={}; c.prop=true; var showProp=function(obj){ obj = new Object(); obj.prop=false return obj; } showProp(c); alert(c.prop); //true
這里明明把傳入obj修改了,如果按照函數(shù)按引用傳參,函數(shù)里面的修改肯定會(huì)反映到外部
希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。
- js中的this關(guān)鍵字詳解
- javascript this用法小結(jié)
- JS中的this變量的使用介紹
- javascript中this的四種用法
- 改變javascript函數(shù)內(nèi)部this指針指向的三種方法
- 關(guān)于js里的this關(guān)鍵字的理解
- Javascript this關(guān)鍵字使用分析
- JS中改變this指向的方法(call和apply、bind)
- Javascript this指針
- 淺析JavaScript中var that=this
- this,this,再次討論javascript中的this,超全面(經(jīng)典)
- JavaScript中的this妙用實(shí)例分析
相關(guān)文章
connection reset by peer問題總結(jié)及解決方案
這篇文章主要介紹了connection reset by peer問題解決方案的相關(guān)資料,這里整理了一些常見問題,及如何解決,需要的朋友可以參考下2016-10-10一個(gè)無限級(jí)XML綁定跨框架菜單(For IE)
一個(gè)無限級(jí)XML綁定跨框架菜單(For IE)...2007-01-01通過JS判斷聯(lián)網(wǎng)類型和連接狀態(tài)的實(shí)現(xiàn)代碼
這篇文章主要介紹了通過JS判斷聯(lián)網(wǎng)類型和連接狀態(tài)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04JavaScript如何動(dòng)態(tài)創(chuàng)建table表格
這篇文章主要介紹了JavaScript如何動(dòng)態(tài)創(chuàng)建table表格,一些時(shí)候需要?jiǎng)討B(tài)的創(chuàng)建和刪除表格,接下來的文章中將為大家介紹下javascript是如何做到的,感興趣的朋友不要錯(cuò)過2015-11-11JavaScript 正則表達(dá)式中g(shù)lobal模式的特性
這篇文章主要介紹了JavaScript 正則表達(dá)式中g(shù)lobal模式的特性 的相關(guān)資料,需要的朋友可以參考下2016-02-02