中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

js中的有哪些“this”指向值得了解

本篇內容介紹了“js中的有哪些“this”指向值得了解”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在東城等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網站制作、成都網站設計、外貿營銷網站建設 網站設計制作按需設計網站,公司網站建設,企業(yè)網站建設,品牌網站建設,營銷型網站建設,成都外貿網站制作,東城網站建設費用合理。

js中的有哪些“this”指向值得了解

14.1 簡介

this是javascript中的一個關鍵字,其使用方法類似于一個變量,是執(zhí)行上下文中一個重要組成部分。其作用是可以在函數體內部獲取當前的運行環(huán)境。

14.2 指向

每個函數的this是在調用的時候基于函數的執(zhí)行環(huán)境綁定的,this的指向完全取決于函數的調用位置。(下面均是在瀏覽器環(huán)境下進行測試的結果)

在全局環(huán)境下,this 始終指向全局對象(window), 無論是否嚴格模式;

console.log(this); // window

普通函數內部的this分兩種情況,嚴格模式和非嚴格模式。

(1)非嚴格模式下,this 默認指向全局對象window

(2)嚴格模式下, this為undefined

function fun() {     console.log(this); // window }

對象內部方法的this指向調用這些方法的對象

(1)函數的定義位置不影響其this指向,this指向只和調用函數的對象有關;

(2)多層嵌套的對象,內部方法的this指向離被調用函數最近的對象(window也是對象,其內部對象調用方法的this指向內部對象,  而非window)。

const obj = {     a: 10,     b: 20,     add: function () {         return this.a + this.b;     } };  console.log(obj.add()); // 30 const add = obj.add; console.log(add()); // NaN

原型鏈中的方法的this仍然指向調用它的對象

const obj = {     a: 10,     b: 20 };  const prototypeObj = {     add: function () {         return this.a + this.b;     } };  Object.setPrototypeOf(obj, prototypeObj);  console.log(obj.add()); // 30

當函數通過Function對象的原型中繼承的方法 call() 和 apply() 方法調用時, 其函數內部的this值可綁定到 call() &  apply() 方法指定的第一個對象上, 如果第一個參數不是對象,JavaScript內部會嘗試將其轉換成對象然后指向它。(見后續(xù)代碼)

通過bind方法綁定后, 函數將被永遠綁定在其第一個參數對象上, 而無論其在什么情況下被調用。(見后續(xù)代碼)

當函數被當做監(jiān)聽事件處理函數時, 其 this 指向觸發(fā)該事件的元素(針對于addEventListener事件)

<button id="testId">按鈕</button>  const btn = document.getElementById('testId'); btn.addEventListener('click', function() {  console.log(this); // <button id="testId">按鈕</button> });

內聯事件中的this指向分兩種情況:

(1)當代碼被內聯處理函數調用時,它的this指向監(jiān)聽器所在的DOM元素

<button onclick="console.log(this)">按鈕</button> // 輸出該DOM節(jié)點

(2)當代碼被包括在函數內部執(zhí)行時,其this指向等同于 函數直接調用的情況,即在非嚴格模式指向全局對象window,  在嚴格模式指向undefined

<button onclick="clickFun()">按鈕</button>  function clickFun() {  console.log(this); // window }

對于延時函數內部的回調函數的this指向全局對象window(當然可以通過bind方法改變其內部函數的this指向)

function Fun() {     this.a = 10;     this.method = function() {         setTimeout(function() {             console.log(this); // window         }, 1000);     } }  const fun = new Fun(); fun.method();

由于箭頭函數不綁定this, 它會捕獲其所在(即定義的位置)上下文的this值, 作為自己的this值,所以 call() / apply() /  bind() 方法對于箭頭函數來說只是傳入參數,對它的 this 毫無影響。

function Fun() {     this.a = 10;     this.method = function() {         setTimeout(() => {             console.log(this); // Fun {a: 10, method: &fnof;}         }, 1000);     } }  const fun = new Fun(); fun.method();

14.3 改變this指向

除了隱式綁定this的方式,還能夠通過顯示綁定的方式,通過call、apply、bind方式改變this指向,對于這三者的區(qū)別后續(xù)將有專門的百題斬去闡述,本節(jié)主要進行一波簡單使用。

call()

call() 方法使用一個指定的 this 值和單獨給出的一個或多個參數來調用一個函數。

function method(val1, val2) {     return this.a + this.b + val1 + val2; }  const obj = {     a: 1,     b: 2 };  console.log(method.call(obj, 3, 4)); // 10

apply()

apply() 方法調用一個具有給定this值的函數,以及以一個數組(或類數組對象)的形式提供的參數。

function method(val1, val2) {     return this.a + this.b + val1 + val2; }  const obj = {     a: 1,     b: 2 };  console.log(method.apply(obj, [3, 4])); // 10

bind()

bind() 方法創(chuàng)建一個新的函數,在 bind() 被調用時,這個新函數的 this 被指定為 bind()  的第一個參數,而其余參數將作為新函數的參數,供調用時使用。

function method(val1, val2) {     return this.a + this.b + val1 + val2; }  const obj = {     a: 1,     b: 2 };  const bindMethod = method.bind(obj, 3, 4); console.log(bindMethod); // [Function: bound method] console.log(bindMethod()); // 10

擴展

  • call() 和 apply()的區(qū)別是call()方法接受的是參數列表,而apply()方法接受的是一個參數數組;

  • bind返回的是一個綁定函數,而call和apply返回的是運行結果;

  • 多次 bind() 是無效的,只會綁定到第一次調用的對象上;

  • call() / apply() / bind() 方法對于箭頭函數來說只是傳入參數,對它的 this 毫無影響。

“js中的有哪些“this”指向值得了解”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯網站,小編將為大家輸出更多高質量的實用文章!

網頁題目:js中的有哪些“this”指向值得了解
轉載來于:http://m.2m8n56k.cn/article36/jogcpg.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站導航軟件開發(fā)網站排名定制網站自適應網站手機網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

手機網站建設
主站蜘蛛池模板: 久久久精品国产免费观看同学 | 欧美亚洲黄色 | 91精品一区二区综合在线 | 欧美特黄一片aa大片免费看 | 亚洲 欧美 精品专区 极品 | 人与拘一级a毛片 | 天堂影院jav成人天堂免费观看 | 日韩在线三级视频 | 一国产一级淫片a免费播放口 | 久久99国产精品久久 | 亚洲国产剧情在线精品视 | 久久久久久久国产精品影院 | 高清欧美日本视频免费观看 | 日韩欧美成末人一区二区三区 | 国产在线精品一区二区夜色 | www.操操操| 女人十八一级毛片 | 国产精品久久久久999 | 手机看片日韩日韩国产在线看 | 特黄日韩免费一区二区三区 | 国产精品久久久久久久久久直 | 成人综合国产乱在线 | 成人国产一区二区三区精品 | 亚洲三级视频 | 国产成年人网站 | 久爱午夜精品免费视频 | 毛片免费观看网址 | 2020亚洲男人天堂 | 国产日韩欧美精品一区二区三区 | 日本精品视频在线播放 | 中文字幕在线观看一区二区 | 久久国产亚洲观看 | 一级毛片一级毛片a毛片欧美 | 久免费视频 | 台湾三级在线播放 | 成人午夜看片在线观看 | 国产精品一区二区资源 | 成人免费看 | 俄罗斯一级毛片免费播放 | 国产精品久久久久久久久久久不卡 | 亚洲美女在线视频 |