摘要:是什么是一個特別的關鍵字,是自動定義在所有函數和全局的作用域中。是在運行時綁定的,而不是聲明時綁定的。小結的指向取決于函數執行時的塊級上下文
This
This是什么:
this是一個特別的關鍵字,是自動定義在所有函數和全局的作用域中。this是在運行時綁定的,而不是聲明時綁定的。
為什么要有this
假設不存在this關鍵字,那么對于一個函數根據不同上下文背景下的復用就用傳入參數
var obj = Object.create(null); obj.name = "Nico"; function speak(context) { console.log(context.name + " speaks a word"); } speak(obj);
this指向的幾種情況:
1、一般情況下,this是指向當前執行時的對象
var person = { name: "nico", getName: function() { console.log(this.name) } } var name = "siip"; person.getName(); //nico
person對象調用getName方法,所以當前this指向的是person對象
2、如果沒有明確對象時,this指向全局對象(在非嚴格模式下,在嚴格模式下,函數綁定undefined,也就是this指向undefined)
var name = "siip"; function className() { console.log(this.name); } className();//siip
其實這里的className可相似于window.className,所以當前this指向window
3、setTimeout、setInterval、匿名函數this指向全局對象
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的指向,因為匿名函數或者定時器函數都是掛載window上的函數,調用者是window對象,這些函數里聲明的函數,也指向調用者,類似于:
function foo() { function bar() { console.log(this) } bar(); } foo();
4、apply、call能夠改變this指向(無參數時或者傳入null、undefined,指向window)
var person = { name: "nico", applyFns: function() { console.log(this.name) } } var name = "siip"; person.applyFns();//nico person.applyFns.apply();//siip
有時候,
5、new Function 構造函數中的this指向該構造函數new出來的對象。
因為new Function的過程大概:
創建一個新的空對象
空對象_proto_指向Function.prototype
空對象與當前函數調用的this綁定
返回新創建對象
所以new Function中的this指向return的對象。
小結this的指向取決于函數執行時的塊級上下文
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107403.html
摘要:一直對抱有敬畏的態度,也沒有一直深入學習。當學到各種框架的時候才發現力不從心,感覺到了基礎的重要性,重新認真的系統的學習一下。 一直對javscript抱有敬畏的態度,也沒有一直深入學習。當學到各種js框架的時候才發現力不從心,感覺到了javascript基礎的重要性,重新認真的系統的學習一下。showImg(http://static.xiaomo.info/images/javas...
摘要:更新單元測試,已使用,,,使用測試覆蓋率,并集成配合來做持續化構建,可以參考本項目的配置文件和的配置文件。判斷是否然后記得在文件中暴露函數單元測試在文件新建測試用例然后記得在中引入之前創建的測試用例腳本。 前言作為戰斗在業務一線的前端,要想少加班,就要想辦法提高工作效率。這里提一個小點,我們在業務開發過程中,經常會重復用到日期格式化、url參數轉對象、瀏覽器類型判斷、節流函數等一類函數...
摘要:之前用用面向對象的方法實現過日期選擇器,最近在練習,現在用實現一遍。需求設定實現一個日期選擇器,默認顯示,高亮顯示。能夠點擊上一月下一月進行日期跳轉。實現日期選擇有兩個比較關鍵的方法獲取當月天數,以便循環遍歷多少天。 之前用jquery用面向對象的方法實現過日期選擇器,最近在練習vue,現在用vue實現一遍。發現vue用數據驅動的方式來實現,感覺還不錯。 需求設定 1.實現一個日期選擇...
閱讀 1304·2021-10-08 10:05
閱讀 4127·2021-09-22 15:54
閱讀 3113·2021-08-27 16:18
閱讀 3112·2019-08-30 15:55
閱讀 1445·2019-08-29 12:54
閱讀 2754·2019-08-26 11:42
閱讀 549·2019-08-26 11:39
閱讀 2134·2019-08-26 10:11