最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

this,this,再次討論javascript中的this,超全面(經(jīng)典)

 更新時(shí)間:2016年01月05日 15:56:25   作者:八面碰壁居士  
在JavaScript中,this 的概念比較復(fù)雜。除了在面向?qū)ο缶幊讨?,this 還是隨處可用的。這篇文章介紹了javascript中的this相關(guān)知識,對javascript this相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧

JavaScript 是一種腳本語言,因此被很多人認(rèn)為是簡單易學(xué)的。然而情況恰恰相反,JavaScript 支持函數(shù)式編程、閉包、基于原型的繼承等高級功能。本文僅采擷其中的一例:JavaScript 中的 this 關(guān)鍵字,深入淺出的分析其在不同情況下的含義,形成這種情況的原因以及 Dojo 等 JavaScript 工具中提供的綁定 this 的方法。可以這樣說,正確掌握了 JavaScript 中的 this 關(guān)鍵字,才算邁入了 JavaScript 這門語言的門檻。

 至于js中this這個(gè)東西,好多淫解釋過了,看起來好高端的樣子,不曉得你看懂了木有?

先引用比較高端的,腳本之家里 的, yes this 

好了,下面加上鄙人比較挫的解釋

論點(diǎn): this 不是變量,不是屬性,不能為其賦值,它始終指向調(diào)用它的對象

感覺還TM太虛了,只要記住最重要的一條即可 ”它始終指向調(diào)用它的對象“ ,所以找到調(diào)用this的對象,就知道this到底指向誰了

1、

alert(this); 

瞅瞅,彈出來的是么子,要么是”object window“ ,要么 "object" 總之就對象了,是那個(gè)對象呢?

alert(this === window); 

結(jié)果為'true' 所以了,現(xiàn)在調(diào)用它的對象是window了

2、

var test = function(){
  alert(this);
}
test(); 

猜猜上面彈出什么,是不是和"alert(this)" 這句一樣的

var test = function(){
  alert(this === window);
 }
test(); 

運(yùn)行上面的代碼,是不是彈出了'true' ?

事情就這樣完了?

要這么簡單的話,何必那么多人都去論述這個(gè)鳥了?

3、

再來

var test = function(){
  alert(this === window);
 }
new test(); 

哎哎,這次咋成'false'呢?

記住”this 始終指向調(diào)用它的對象“,第”1、“處調(diào)用該段代碼的直接對象是全局對象,即"window" ;第”2、“處雖然是函數(shù),但是調(diào)用其的仍然是”window“(不要弄混了,函數(shù)雖然是對象,但是調(diào)用它的是另一個(gè)對象);第”3、“處,使用了”new“ 這時(shí)其實(shí)已經(jīng)發(fā)生變化了,這是一個(gè)構(gòu)造函數(shù),構(gòu)造函數(shù)創(chuàng)建時(shí)創(chuàng)建了一個(gè)新的空的對象,即”new test()“創(chuàng)建了一個(gè)新的對象,然后再由這個(gè)對象指向函數(shù)"test"中的代碼,因此此時(shí)this不在是window對象,而是該構(gòu)造函數(shù)創(chuàng)建的新對象。

4、

var test ={
  'a':1,
  'b':function(){
   alert(this === test)
  }
 }
test.b(); 

有了上面的論點(diǎn),這下一下子清楚了吧!

5、

var test ={
  'a':1,
  'b':function(){
   alert(this === test)
  }
 }
var test1 = test;
test1.b(); 

so, 你不會(huì)認(rèn)為結(jié)果為"false"吧,錯(cuò)了,雖然'test1'的值為'test'  但是'test1'不還是'test'對象么,它有新產(chǎn)生對象,你暫且理解為引用的了,兩個(gè)都指向一個(gè)對象,奉上下面一段代碼為證

var test ={
  'a':1,
  'b':function(){
   alert(this === test)
  }
 }
var test1 = test;
test.a = 2;
alert(test1.a); 

如果彈出了”1“,你來罵我

6、再整個(gè)復(fù)雜的

var test ={
  'a':1,
  'b':{
   'b1':function(){
    alert(this === test);
   }
  }
 }
test.b.b1(); 

這是"true"還是"false"呢?

按照上面的理論,這時(shí)"this"不再直接被'test'調(diào)用了,而是被'test.b' 調(diào)用, 奉上下面一段代碼為證

var test ={
  'a':1,
  'b':{
   'b1':function(){
    alert(this === test.b);
   }
  }
 }
test.b.b1(); 

 7、好再整個(gè)復(fù)雜點(diǎn)的

var test = function(){
  var innerTest = function(){
   alert(this === test);
  }
  innerTest();
 }
test(); 

你不會(huì)認(rèn)為彈出"true"吧,不是按照上面的理論'innerTest'是被'test'調(diào)用的,然后'this'就指向'test'嗎?
額,錯(cuò)就錯(cuò)在是誰調(diào)用的'innerTest', 其實(shí)這種函數(shù)都是'window'對象調(diào)用的,及時(shí)你嵌套一千層,調(diào)用各個(gè)函數(shù)的都是'window'對象,奉上下面這段代碼為證

var test = function(){
  var innerTest = function(){
   alert(this === window);
   var innerTest1 = function(){
    alert(this === window);
   }
   innerTest1();
  }
  innerTest();
 }
test(); 

8、再來一段特殊的

var test = function(){
  alert(this === window);
 }
var test1 = {
}
test.apply(test1); 

這個(gè)我覺得大家都不會(huì)猜錯(cuò),該函數(shù)的作用就是”調(diào)用一個(gè)對象的一個(gè)方法,以另一個(gè)對象替換當(dāng)前對象“ 所以了'window' 對象已經(jīng)被替代為'test1',自然為'false'了,奉上如下代碼以為證明

var test = function(){
  alert(this === test1);
 }
 var test1 = {
  }
test.apply(test1); 

 那么諸如'call'之類的也就相似了

9、再來一個(gè)原型的繼承,區(qū)別于字面量的繼承

var test = function(){
 }
 var my = function(){
  this.a = function(){
   alert(this === mytest2);
  }
 }
 var mytest = new my();
 test.prototype = mytest;
 var mytest2 = new test();
 mytest2.a(); 

10、還剩下些什么了,可能就是'dom'對象了

<script>
  var mytest = function(context){
   alert(context.getAttribute('id'));
   alert(this === window);
  }
 </script>
 <div id="test" onclick="mytest(this)">aaaa</div> 

看了上面的應(yīng)該了解了吧,里面的'this'分別代表神馬

相關(guān)文章

  • Web3.js查詢以太幣和代幣余額及轉(zhuǎn)賬

    Web3.js查詢以太幣和代幣余額及轉(zhuǎn)賬

    這篇文章主要介紹了Web3.js查詢以太幣和代幣余額以及轉(zhuǎn)賬,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 淺析JavaScript中五種模塊系統(tǒng)的使用

    淺析JavaScript中五種模塊系統(tǒng)的使用

    模塊系統(tǒng)是什么?簡單來說,其實(shí)就是我們在一個(gè)文件里寫代碼,聲明一些可以導(dǎo)出的字段,然后另一個(gè)文件可以將其導(dǎo)入并使用。今天我們來聊聊?JavaScript?的模塊系統(tǒng),感興趣的可以了解一下
    2022-11-11
  • 微信小程序HTTP接口請求封裝的實(shí)現(xiàn)

    微信小程序HTTP接口請求封裝的實(shí)現(xiàn)

    這篇文章主要介紹了微信小程序HTTP接口請求封裝的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • JS實(shí)現(xiàn)環(huán)形進(jìn)度條(從0到100%)效果

    JS實(shí)現(xiàn)環(huán)形進(jìn)度條(從0到100%)效果

    這篇文章主要介紹了JS實(shí)現(xiàn)環(huán)形進(jìn)度條(從0到100%)效果的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • 利用Javascript開發(fā)一個(gè)二維周視圖日歷

    利用Javascript開發(fā)一個(gè)二維周視圖日歷

    這篇文章主要給大家介紹了關(guān)于利用Javascript如何開發(fā)一個(gè)二維周視圖日歷的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • js生成動(dòng)態(tài)表格并為每個(gè)單元格添加單擊事件的方法

    js生成動(dòng)態(tài)表格并為每個(gè)單元格添加單擊事件的方法

    這篇文章主要介紹了使用javascript生成動(dòng)態(tài)表格并為每個(gè)單元格添加單擊事件,需要的朋友可以參考下
    2014-04-04
  • 最新評論

    海原县| 沁水县| 泸州市| 新丰县| 嘉鱼县| 南昌市| 云梦县| 交口县| 湖北省| 延安市| 安图县| 富阳市| 三门县| 淄博市| 老河口市| 东平县| 远安县| 米易县| 宜君县| 三河市| 山西省| 南皮县| 陕西省| 丘北县| 赫章县| 吴川市| 辽宁省| 建昌县| 万荣县| 措勤县| 新蔡县| 安图县| 富顺县| 岳普湖县| 理塘县| 鲁山县| 乌拉特中旗| 吉林省| 白银市| 中山市| 泽普县|