首頁 > web前端 > js教程 > 主體

JS函數this的用法實例分析_javascript技巧

WBOY
發布: 2016-05-16 16:15:42
原創
1076 人瀏覽過

本文實例講述了JS函數this的用法。分享給大家供大家參考。具體如下:

在js中寫函數時,很多用到this. this究竟是什麼,this是個關鍵字,是個指針,指向執行環境作用域,也稱之為上下文。
先說下函數吧,個人理解是函數是在語言中重複調用的程式碼區塊.
在JS裡,把函數賦值給物件的屬性時,稱為方法
如:

var m={};
m.title='title';
m.show=function(){
alert(this.title)
}
m.show()

登入後複製

就是把函數當作物件m的方法來呼叫
這樣的話,this指向的就是m這個物件.

直接調函數名的叫函數:

var a=1212;
function show(){
alert(a)//1212
}
show()// 1212

登入後複製

在全域環境裡,可以把全域變數理解為window的屬性,全域函數為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;  先理解这句话,因为函数是个对象,
m.show=function(){
  alert(this.id)
}

登入後複製

這表達式相當於a.show 與m.show同時引用指向

function(){
  alert(this.id)
}
登入後複製

其實相當於

a.show=function(){
  alert(this.id)
}
登入後複製

所以呼叫a.show()時,this指向的是a物件,
再看以下一個栗子

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)
}
登入後複製

參數為基本資料型別時好理解

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程式設計有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!