本文實例講述了JS函數this的用法。分享給你們供你們參考。具體以下:
在js中寫函數時,不少用到this. this到底是什麼,this是個關鍵字,是個指針,指向執行環境做用域,也稱之爲上下文。
先說下函數吧,我的理解是函數是在語言中重複調用的代碼塊.
在JS裏,把函數賦值給對象的屬性時,稱之爲方法
如:javascript
var m={};
m.title='title';
m.show=function(){
alert(this.title)
}
m.show()
就是把函數做爲對象m的方法來調用
這樣的話,this指向的就是m這個對象.
直接調函數名的叫函數:java
var a=1212;
function show(){
alert(a)//1212
}
show()// 1212
在全局環境裏,能夠把全局變量理解爲window的屬性,全局函數爲window的方法
看下面的例子:node
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; 先理解這句話,由於函數是個對象,
m.show=function(){
alert(this.id)
}
這表達式至關於a.show 與m.show同時引用指向app
function(){
alert(this.id)
}
其實至關於函數
a.show=function(){
alert(this.id)
}
因此調用a.show()時,this指向的是a對象,
再看如下一個栗子this
var m ={};
m.id='mmm'
m.show=function(){
alert(this.id)
}
var a={}
a.id='aaa'
a.show=function(){
m.show()
};
a.show(); //mmm
因此調用a.show()時,至關於調用了m.show()的方法,因此this.指向的是m對象。
再看如下一個例子,一開始仍是不很懂設計
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);//傳進來,
}
findNode(app.paint);
alert(this.color); //red 而不是green
函數傳參時,是按值傳參的,而不是引用
因此findNode(app.paint);傳進來時,實際上是指針
function(node){
node.style.color=this.color;
alert(this.color);
}
的引用,又由於findNode是全局定義的,因此this指向WINDOW OR UNDEFINED;
關於傳參,按值傳遞過去的對象
function show(a){
alert(a)
}
參數爲基本數據類型時好理解ip
var b=10;
show(b)//alert(10);
至於對象
var c ={};
c.prop=true;
var showProp=function(obj){
obj.prop=false
}
showProp(c); //c.prop = false
有些人以爲是上面例子是按引用傳參
其實上面仍是按值傳參,showProp(c)把c傳進函數裏時,c其實至關於一個引用, 函數裏對obj.prop=false,至關於對引用的對象 改爲{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修改了,若是按照函數按引用傳參,函數裏面的修改確定會反映到外部但願本文所述對你們的javascript程序設計有所幫助。