国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺談JavaScript中的this指針和引用知識

2019-11-20 09:18:08
字體:
供稿:網(wǎng)友

this是javascript的一個關(guān)鍵字,隨著函數(shù)使用場合不同,this的值會發(fā)生變化。但是總有一個原則,那就是this指的是調(diào)用函數(shù)的那個對象。

this指針在傳統(tǒng)OO語言中,是在類中聲明的,表示對象本身.在JavaScript中,this表示當前上下文,即調(diào)用者的引用

********this永遠指向的是(函數(shù)對象)的所有者

this和全局對象:

var a = 1; function foo(){ var b = 2; console.log(this.a+b);//3 } foo(); //foo函數(shù)所有者是window,全局函數(shù)中this指代的是window對象(********除非使用new,call,apply方法來改變this的指代關(guān)系)

this和對象:

var person = { name:'Theo Wong', gender:'male', getName:function(){ console.log(this.name);//getName函數(shù)所有者是person對象 } }; person.getName();

嵌套函數(shù)中的this

var myObject = { func1:function() { console.log(this); //myObject var func2=function() { console.log(this); //window var func3=function() { console.log(this); //window }(); }(); } }; myObject.func1(); //在嵌套函數(shù)中,由于嵌套函數(shù)的執(zhí)行上下文是window,所以this指代的是window對象,其實這是ECMA-262-3的一個bug,在最新的ECMA-262-5中已經(jīng)修復

事件處理中的this:

var showValue = function(){ alert(this.value); };

1.<input id="test" type="text" />

通過dom.onclick綁定事件,document.getElementById('test').onclick = showValue;

此時showValue是作為dom的onclick方法被調(diào)用的,所以它的this應(yīng)該指代的是dom對象,而不再是window對象

2.寫在html標簽內(nèi),<input id="test" type="text" onclick="showValue();" />

當點擊dom時,我們獲取不到正確的this,此時的this指代的是window對象,因為window對象中沒有定義value的值,所以獲取不到this.value

***此時的不是將showValue函數(shù)賦值給dom對象的onclick,而是引用,此時function()函數(shù)所有者是window

document.getElementById('test').onclick = function(){showValue();}

通過addEventListener/attachEvent綁定事件監(jiān)聽

<input type="text" id="test" /> <script type="text/javascript"> var dom = document.getElementById('test'); id = 'window'; function test(){ alert(this.id); } dom.addEventListener?dom.addEventListener('click',test,false):dom.attachEvent('onclick',test); //addEventListener test //attachEvent window </script>//這種綁定事件監(jiān)聽的方式,attachEvent this是window對象,而addEventListener則是dom對象的

this和構(gòu)造:

function obj(name,age){ this.name = name; this.age = age; this.fun = function(){ alert(this.name); }; } var obj = new obj('xht',18);//this就指這個新對象,new 改變this的指代關(guān)系 obj.fun();//xht

this和call

//定義一個人,名字為jack var jack = { name : "jack", age : 26 } //定義另一個人,名字為abruzzi var abruzzi = { name : "abruzzi", age : 26 } //定義一個全局的函數(shù)對象 function alertName(){ return this.name; } //設(shè)置alertName的上下文為jack, 此時的this為jack alert(alertName.call(jack)); //設(shè)置alertName的上下文為abruzzi,此時的this為abruzzi alert(alertName.call(abruzzi));

引用是一個比較有意思的主題,跟其他的語言不同的是,JavaScript 中的引用始終指向最終的對象,而并非引用本身

var obj = {}; // 空對象 var ref = obj; // 引用 obj.name = "objectA" ; alert(ref . name); //ref 跟著添加了 name 屬性 obj = ["one" , "two" , "three"]; //obj 指向了另一個對象 ( 數(shù)組對象 ) alert(ref.name); //ref 還指向原來的對象 alert(obj.length ); //3 alert(ref.length);

obj 只是對一個匿名對象的引用,所以, ref 并非指向它.

引用指向的只能是具體的對象,當具體對象改變的時候,引用還是引用原來的對象,而不是改變后的對象。

以上所述是小編給大家介紹的JavaScript中的this指針和引用知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 天门市| 仙桃市| 都安| 庆城县| 上蔡县| 朝阳区| 松潘县| 永清县| 临夏市| 昌黎县| 尖扎县| 林甸县| 陆丰市| 丹寨县| 垦利县| 鞍山市| 和平县| 宜州市| 南川市| 柏乡县| 印江| 虎林市| 阿鲁科尔沁旗| 来宾市| 沾化县| 从化市| 祁连县| 梁河县| 荥经县| 漳平市| 大兴区| 亳州市| 隆化县| 莱芜市| 潞城市| 长春市| 盖州市| 大渡口区| 黄平县| 塔河县| 包头市|