1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      javascript中什么是this

      這篇文章主要介紹“javascript中什么是this”,在日常操作中,相信很多人在javascript中什么是this問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”javascript中什么是this”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

      創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的廣豐網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

      在js中,this的意思為“這個;當前”,是一個指針型變量,它動態(tài)指向當前函數(shù)的運行環(huán)境。在不同的場景中調(diào)用同一個函數(shù),this的指向也可能會發(fā)生變化,但是它永遠指向其所在函數(shù)的真實調(diào)用者;如果沒有調(diào)用者,就指向全局對象window。

      javascript中什么是this

      本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

      JavaScript 函數(shù)被調(diào)用后會在一個特定的運行環(huán)境內(nèi)執(zhí)行,這個運行環(huán)境就是函數(shù)的調(diào)用者,或者說是調(diào)用函數(shù)的對象。如果函數(shù)沒有調(diào)用者(不是通過對象調(diào)用,而是直接調(diào)用),那么運行環(huán)境就是全局對象 window。

      為了在函數(shù)執(zhí)行過程中能夠引用(訪問)運行環(huán)境,JavaScript 專門增加了一個 this 關(guān)鍵字。this 是一個指針型變量,它指向當前函數(shù)的運行環(huán)境。

      在不同的場景中調(diào)用同一個函數(shù),this 的指向也可能會發(fā)生變化,但是它永遠指向其所在函數(shù)的真實調(diào)用者(誰調(diào)用就指向誰);如果沒有調(diào)用者,this 就指向全局對象 window。

      在《JS this和調(diào)用對象》一節(jié)中我們曾講到 this 指針的初步使用,不了解的讀者請猛擊鏈接學習,本節(jié)重點對 this 指針進行深度剖析。

      使用 this

      this 是由 JavaScript 引擎在執(zhí)行函數(shù)時自動生成的,存在于函數(shù)內(nèi)的一個動態(tài)指針,指代當前調(diào)用對象。具體用法如下:

      this[.屬性]

      如果 this 未包含屬性,則傳遞的是當前對象。

      this 用法靈活,其包含的值也是變化多端。例如,下面示例使用 call() 方法不斷改變函數(shù)內(nèi) this 指代對象。

      var x = "window";  //定義全局變量x,初始化字符串為“window”
      function a () {  //定義構(gòu)造函數(shù)a
          this.x = "a";  //定義私有屬性x,初始化字符a
      }
      function b () {  //定義構(gòu)造函數(shù)b
          this.x = "b";  //定義私有屬性x,初始化為字符b
      }
      function c () {  //定義普通函數(shù),提示變量x的值
          console.log(x);
      }
      function f () {  //定義普通函數(shù),提示this包含的x的值
          console.log(this.x);
      }
      f();  //返回字符串“window”,this指向window對象
      f.call(window);  //返回字符串“window”,指向window對象
      f.call(new a());  //返回字符a,this指向函數(shù)a的實例
      f.call(new b());  //返回字符b,this指向函數(shù)b的實例
      f.call(c);  //返回undefined,this指向函數(shù)c對象

      下面簡單總結(jié) this 在 5 種常用場景中的表現(xiàn)以及應(yīng)對策略。

      1. 普通調(diào)用

      下面示例演示了函數(shù)引用和函數(shù)調(diào)用對 this 的影響。

      var obj = {  //父對象
          name : "父對象obj",
          func : function () {
              return this;
          }
      }
      obj.sub_obj = {  //子對象
          name : "子對象sub_obj",
          func : obj.func
      }
      var who = obj.sub_obj.func();
      console.log(who.name);  //返回“子對象sub_obj”,說明this代表sub_obj

      如果把子對象 sub_obj 的 func 改為函數(shù)調(diào)用。

      obj.sub_obj = {
          name : "子對象sub_obj",
          func : obj.func()  //調(diào)用父對象obj的方法func
      }

      則函數(shù)中的 this 所代表的是定義函數(shù)時所在的父對象 obj。

      var who = obj.sub_obj.func;
      console.log(who.name);  //返回“父對象obj”,說明this代表父對象obj

      2. 實例化

      使用 new 命令調(diào)用函數(shù)時,this 總是指代實例對象。

      var obj = {};
      obj.func = function () {
          if (this == obj) console.log("this = obj");
          else if (this == window) console.log("this = window");
          else if (this.contructor == arguments.callee) console.log("this = 實例對象");
      }
      new obj.func;  //實例化

      3. 動態(tài)調(diào)用

      使用 call 和 apply 可以強制改變 this,使其指向參數(shù)對象。

      function func () {
          //如果this的構(gòu)造函數(shù)等于當前函數(shù),則表示this為實例對象
          if (this.contructor == arguments.callee) console.log("this = 實例對象");
          //如果this等于window,則表示this為window對象
          else if (this == window) console.log("this = window對象");
          //如果this為其他對象,則表示this為其他對象
          else console.log("this == 其他對象 \n this.constructor =" + this.constructor);
      }
      func();  //this指向window對象
      new func();  //this指向?qū)嵗龑ο?
      cunc.call(1);  //this指向數(shù)值對象

      在上面示例中,直接調(diào)用 func() 時,this 代表 window 對象。當使用 new 命令調(diào)用函數(shù)時,將創(chuàng)建一個新的實例對象,this 就指向這個新創(chuàng)建的實例對象。

      使用 call() 方法執(zhí)行函數(shù) func() 時,由于 call() 方法的參數(shù)值為數(shù)字 1,則 JavaScript 引擎會把數(shù)字 1 強制封裝為數(shù)值對象,此時 this 就會指向這個數(shù)值對象。

      4. 事件處理

      在事件處理函數(shù)匯總,this 總是指向觸發(fā)該事件的對象。

      
      

      在上面代碼中,func() 所包含的 this 不再指向?qū)ο?obj,而是指向按鈕 button,因為 func() 是被傳遞給按鈕的事件處理函數(shù)之后才被調(diào)用執(zhí)行的。

      如果使用 DOM2 級標準注冊事件處理函數(shù),程序如下:

      if (window.attachEvent) {  //兼容IE模型
          button.attachEvent("onclick", obj.func);
      } else {  //兼容DOM標準模型
          button.addEventListener("click", obj.func, true);
      }

      在 IE 瀏覽器中,this 指向 window 對象和 button 對象,而在 DOM 標準的瀏覽器中僅指向 button 對象。因為,在 IE 瀏覽器中,attachEvent() 是 window 對象的方法,調(diào)用該方法時,this 會指向 window 對象。

      為了解決瀏覽器兼容性問題,可以調(diào)用 call() 或 apply() 方法強制在對象 obj 身上執(zhí)行方法 func(),避免出現(xiàn)不同的瀏覽器對 this 解析不同的問題。

      if (window.attachEvent) {
          button.attachEvent("onclick", function () {  //用閉包封裝call()方法強制執(zhí)行func()
              obj.func.call(obj);
          });
      } else {
          button.attachEventListener("onclick", function () {
              obj.func.call(obj);
          }, true);
      }

      當再次執(zhí)行時,func() 中包含的 this 始終指向?qū)ο?obj。

      5. 定時器

      使用定時器調(diào)用函數(shù)。

      var obj = {};
      obj.func = function () {
          if (this == obj) console.log("this = obj");
          else if (this == window) console.log("this = window對象");
          else if (this.constructor == arguments.callee) console.log("this = 實例對象");
          else console.log("this == 其他對象 \n this.constructor =" + this.constructor);
      }
      setTimeOut(obj.func, 100);

      在 IE 中 this 指向 window 對象和 button 對象,具體原因與上面講解的 attachEvent() 方法相同。在符合 DOM 標準的瀏覽器中,this 指向 window 對象,而不是 button 對象。

      因為方法 setTimeOut() 是在全局作用域中被執(zhí)行的,所以 this 指向 window 對象。要解決瀏覽器兼容性問題,可以使用 call 或 apply 方法來實現(xiàn)。

      setTimeOut (function () {
          obj.func.call(obj);
      }, 100);

      到此,關(guān)于“javascript中什么是this”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
      本文題目:javascript中什么是this
      分享地址:http://www.ef60e0e.cn/article/jgeejp.html

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        定日县| 武乡县| 勐海县| 南汇区| 进贤县| 大悟县| 项城市| 延寿县| 奈曼旗| 靖西县| 惠水县| 中牟县| 龙川县| 三明市| 沂南县| 徐汇区| 开封县| 玉林市| 昌邑市| 昔阳县| 建水县| 福安市| 隆尧县| 巴青县| 博客| 田阳县| 紫金县| 麻栗坡县| 仲巴县| 通辽市| 台东市| 巴楚县| 中宁县| 汝城县| 利津县| 万年县| 枝江市| 达日县| 宣化县| 永善县| 沐川县|