摘要:是什么是一個(gè)特別的關(guān)鍵字,是自動(dòng)定義在所有函數(shù)和全局的作用域中。是在運(yùn)行時(shí)綁定的,而不是聲明時(shí)綁定的。小結(jié)的指向取決于函數(shù)執(zhí)行時(shí)的塊級(jí)上下文
This
This是什么:
this是一個(gè)特別的關(guān)鍵字,是自動(dòng)定義在所有函數(shù)和全局的作用域中。this是在運(yùn)行時(shí)綁定的,而不是聲明時(shí)綁定的。
為什么要有this
假設(shè)不存在this關(guān)鍵字,那么對(duì)于一個(gè)函數(shù)根據(jù)不同上下文背景下的復(fù)用就用傳入?yún)?shù)
var obj = Object.create(null); obj.name = "Nico"; function speak(context) { console.log(context.name + " speaks a word"); } speak(obj);
this指向的幾種情況:
1、一般情況下,this是指向當(dāng)前執(zhí)行時(shí)的對(duì)象
var person = { name: "nico", getName: function() { console.log(this.name) } } var name = "siip"; person.getName(); //nico
person對(duì)象調(diào)用getName方法,所以當(dāng)前this指向的是person對(duì)象
2、如果沒(méi)有明確對(duì)象時(shí),this指向全局對(duì)象(在非嚴(yán)格模式下,在嚴(yán)格模式下,函數(shù)綁定undefined,也就是this指向undefined)
var name = "siip"; function className() { console.log(this.name); } className();//siip
其實(shí)這里的className可相似于window.className,所以當(dāng)前this指向window
3、setTimeout、setInterval、匿名函數(shù)this指向全局對(duì)象
var person = { name: "nico", fns: function() { setTimeout(function() { console.log(this.name) }, 100);//siip setInterval(function() { console.log(this.name) }, 100);//siip (function() { console.log(this.name) })()//siip } } var name = "siip"; person.fns();
這些方法都比較容易理解this的指向,因?yàn)槟涿瘮?shù)或者定時(shí)器函數(shù)都是掛載window上的函數(shù),調(diào)用者是window對(duì)象,這些函數(shù)里聲明的函數(shù),也指向調(diào)用者,類(lèi)似于:
function foo() { function bar() { console.log(this) } bar(); } foo();
4、apply、call能夠改變this指向(無(wú)參數(shù)時(shí)或者傳入null、undefined,指向window)
var person = { name: "nico", applyFns: function() { console.log(this.name) } } var name = "siip"; person.applyFns();//nico person.applyFns.apply();//siip
有時(shí)候,
5、new Function 構(gòu)造函數(shù)中的this指向該構(gòu)造函數(shù)new出來(lái)的對(duì)象。
因?yàn)閚ew Function的過(guò)程大概:
創(chuàng)建一個(gè)新的空對(duì)象
空對(duì)象_proto_指向Function.prototype
空對(duì)象與當(dāng)前函數(shù)調(diào)用的this綁定
返回新創(chuàng)建對(duì)象
所以new Function中的this指向return的對(duì)象。
小結(jié)this的指向取決于函數(shù)執(zhí)行時(shí)的塊級(jí)上下文
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/107403.html
摘要:一直對(duì)抱有敬畏的態(tài)度,也沒(méi)有一直深入學(xué)習(xí)。當(dāng)學(xué)到各種框架的時(shí)候才發(fā)現(xiàn)力不從心,感覺(jué)到了基礎(chǔ)的重要性,重新認(rèn)真的系統(tǒng)的學(xué)習(xí)一下。 一直對(duì)javscript抱有敬畏的態(tài)度,也沒(méi)有一直深入學(xué)習(xí)。當(dāng)學(xué)到各種js框架的時(shí)候才發(fā)現(xiàn)力不從心,感覺(jué)到了javascript基礎(chǔ)的重要性,重新認(rèn)真的系統(tǒng)的學(xué)習(xí)一下。showImg(http://static.xiaomo.info/images/javas...
摘要:更新單元測(cè)試,已使用,,,使用測(cè)試覆蓋率,并集成配合來(lái)做持續(xù)化構(gòu)建,可以參考本項(xiàng)目的配置文件和的配置文件。判斷是否然后記得在文件中暴露函數(shù)單元測(cè)試在文件新建測(cè)試用例然后記得在中引入之前創(chuàng)建的測(cè)試用例腳本。 前言作為戰(zhàn)斗在業(yè)務(wù)一線的前端,要想少加班,就要想辦法提高工作效率。這里提一個(gè)小點(diǎn),我們?cè)跇I(yè)務(wù)開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)重復(fù)用到日期格式化、url參數(shù)轉(zhuǎn)對(duì)象、瀏覽器類(lèi)型判斷、節(jié)流函數(shù)等一類(lèi)函數(shù)...
摘要:可以根據(jù)省份城市和區(qū)對(duì)組件設(shè)置默認(rèn)值。獲取省份獲取城市獲取區(qū)出現(xiàn)層嵌套的回調(diào),這就是傳說(shuō)中的惡魔金字塔。相比回調(diào)嵌套,層次更分明,可讀性強(qiáng)。基本原理學(xué)習(xí)無(wú)論是在異步操作的執(zhí)行之前或執(zhí)行之后,用對(duì)象的方法注冊(cè)回調(diào),回調(diào)都能一致執(zhí)行。 遭遇惡魔金字塔 項(xiàng)目需要,封裝了一個(gè)省市區(qū)的地址選擇器組件。 可以根據(jù)省份id、城市id和區(qū)id對(duì)組件設(shè)置默認(rèn)值。邏輯是這樣的: 獲取省份列表,選中默認(rèn)省...
摘要:之前用用面向?qū)ο蟮姆椒▽?shí)現(xiàn)過(guò)日期選擇器,最近在練習(xí),現(xiàn)在用實(shí)現(xiàn)一遍。需求設(shè)定實(shí)現(xiàn)一個(gè)日期選擇器,默認(rèn)顯示,高亮顯示。能夠點(diǎn)擊上一月下一月進(jìn)行日期跳轉(zhuǎn)。實(shí)現(xiàn)日期選擇有兩個(gè)比較關(guān)鍵的方法獲取當(dāng)月天數(shù),以便循環(huán)遍歷多少天。 之前用jquery用面向?qū)ο蟮姆椒▽?shí)現(xiàn)過(guò)日期選擇器,最近在練習(xí)vue,現(xiàn)在用vue實(shí)現(xiàn)一遍。發(fā)現(xiàn)vue用數(shù)據(jù)驅(qū)動(dòng)的方式來(lái)實(shí)現(xiàn),感覺(jué)還不錯(cuò)。 需求設(shè)定 1.實(shí)現(xiàn)一個(gè)日期選擇...
閱讀 1294·2021-10-08 10:05
閱讀 4105·2021-09-22 15:54
閱讀 3105·2021-08-27 16:18
閱讀 3106·2019-08-30 15:55
閱讀 1435·2019-08-29 12:54
閱讀 2748·2019-08-26 11:42
閱讀 542·2019-08-26 11:39
閱讀 2128·2019-08-26 10:11