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

首頁 > 開發 > JS > 正文

js中this的指向問題歸納總結

2024-05-06 16:46:57
字體:
來源:轉載
供稿:網友

前言

js中this指向問題是個老生常談的問題了,下面這篇文章再來給大家介紹下,大家可以看看,更深入的了解了解,下面話不多說了,來一起看看詳細的介紹吧

this

this:上下文,會根據執行環境變化而發生指向的改變.

1.單獨的this,指向的是window這個對象

alert(this); // this -> window

2.全局函數中的this

function demo() { alert(this); // this -> window}demo();

在嚴格模式下,this是undefined.

function demo() { 'use strict'; alert(this); // undefined}demo();

3.函數調用的時候,前面加上new關鍵字

所謂構造函數,就是通過這個函數生成一個新對象,這時,this就指向這個對象。

function demo() { //alert(this); // this -> object this.testStr = 'this is a test';}let a = new demo();alert(a.testStr); // 'this is a test'

4.用call與apply的方式調用函數

function demo() { alert(this);}demo.call('abc'); // abcdemo.call(null); // this -> windowdemo.call(undefined); // this -> window

5.定時器中的this,指向的是window

setTimeout(function() { alert(this); // this -> window ,嚴格模式 也是指向window},500)

6.元素綁定事件,事件觸發后,執行的函數中的this,指向的是當前元素

window.onload = function() { let $btn = document.getElementById('btn'); $btn.onclick = function(){ alert(this); // this -> 當前觸發 }}

7.函數調用時如果綁定了bind,那么函數中的this指向了bind中綁定的元素

window.onload = function() { let $btn = document.getElementById('btn'); $btn.addEventListener('click',function() { alert(this); // window }.bind(window))}

8.對象中的方法,該方法被哪個對象調用了,那么方法中的this就指向該對象

let name = 'finget'let obj = { name: 'FinGet', getName: function() { alert(this.name); }}obj.getName(); // FinGet---------------------------分割線----------------------------let fn = obj.getName;fn(); //finget this -> window

騰訊筆試題

var x = 20;var a = { x: 15, fn: function() { var x = 30; return function() {  return this.x } }}console.log(a.fn());console.log((a.fn())());console.log(a.fn()());console.log(a.fn()() == (a.fn())());console.log(a.fn().call(this));console.log(a.fn().call(a));

答案

1.console.log(a.fn());

對象調用方法,返回了一個方法。

# function() {return this.x}

2.console.log((a.fn())());

a.fn()返回的是一個函數,()()這是自執行表達式。this -> window

# 20

3.console.log(a.fn()());

a.fn()相當于在全局定義了一個函數,然后再自己調用執行。this -> window

# 20

4.console.log(a.fn()() == (a.fn())());

# true

5.console.log(a.fn().call(this));

這段代碼在全局環境中執行,this -> window

# 20

6.console.log(a.fn().call(a));

this -> a

# 15

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 神木县| 贺兰县| 张家川| 神农架林区| 通许县| 博客| 长岭县| 长丰县| 杭锦旗| 太白县| 丹江口市| 米泉市| 进贤县| 贞丰县| 沽源县| 周口市| 黄龙县| 肃宁县| 阿荣旗| 肇源县| 蒙城县| 密山市| 瓮安县| 江川县| 云浮市| 宁都县| 台中市| 贵阳市| 西华县| 民丰县| 乐清市| 同仁县| 元谋县| 苏尼特右旗| 醴陵市| 凤台县| 北宁市| 马尔康县| 湟中县| 台湾省| 女性|