摘要:面向?qū)ο缶幊讨赶蛞弧?偨Y(jié)的值要等到代碼真正執(zhí)行是才能確定。,調(diào)用,只想我們指定的對象后續(xù)更新。對象調(diào)用,如執(zhí)行,指向。默認的,指向全局變量。特殊雖然也是對象,但是在這里還是指向那個函數(shù)的實例,因為比較特殊。
面向?qū)ο缶幊?--- this指向
一。首先:,
this的指向在函數(shù)定義的時候是確定不了的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰,實際上this的最終指向的是那個調(diào)用它的對象。
二。例如:
var obj = { a : 1, b : function() { console.log(this.a) } }
當 obj.b()時,會輸出1;
當 var fun = obj.b; fun() 時,會輸出undefined。
三。原因:
1.obj.b()這里的this指向的是對象o,因為你調(diào)用這個fn是通過o.fn()執(zhí)行的,那自然指向就是對象o。
2.
var fun = obj.b; fun();
相當于,
var b = function(){ console.log(this.a) }; obj = { a:1, b:b }; var fun = obj.b; fun();
雖然fun是obj.b的一個引用,但是實際上,他引用的是b函數(shù)本身,因此此時的fun()其實是一個不帶任何修飾的函數(shù)調(diào)用,只是在將fn賦值給變量j的時候并沒有執(zhí)行所以最終指向的是window。
四??偨Y(jié): this的值要等到代碼真正執(zhí)行是才能確定。
同時,this的值有如下幾種情況:
1.new調(diào)用時指的是被構(gòu)造的對象。(
function Fn(){ this.user = "貓咪" }; var a = new Fn(); consle.log(a.user); //貓咪
這里之所以對象a可以點出函數(shù)Fn里面的user是因為new關(guān)鍵字可以改變this的指向,將這個this指向?qū)ο?b>a,為什么我說a是對象,因為用了new關(guān)鍵字就是創(chuàng)建一個對象實例,我們這里用變量a創(chuàng)建了一個Fn的實例[相當于復制了一份Fn到對象a里面],此時僅僅只是創(chuàng)建,并沒有執(zhí)行,而調(diào)用這個函數(shù)Fn的是對象a,那么this指向的自然是對象a,那么為什么對象a中會有user,因為你已經(jīng)復制了一份Fn函數(shù)到對象a中,用了new關(guān)鍵字就等同于復制了一份。)
2.call,apply調(diào)用,只想我們指定的對象(后續(xù)更新)。
3.對象調(diào)用,如執(zhí)行obj.b(),this指向obj。
4.默認的,指向全局變量window。
特殊:構(gòu)造函數(shù)版this, 當this碰到return時。
舉例:
(1).
function fn() { this.user = "金毛"; return {}; }; var a = new fn; console.log(a.user); //undefined
(2).
function fn() { this.user = "金毛"; return function(){}; }; var a = new fn; console.log(a.user); //undefined
(3).
function fn() { this.user = "金毛"; return 1; }; var a = new fn; console.log(a.user); //金毛
(4).
function fn() { this.user = "金毛"; return undefined; }; var a = new fn; console.log(a.user); //金毛
2.總結(jié):如果返回值是一個對象,那么this指向的就是那個返回的對象,如果返回值不是一個對象那么this還是指向函數(shù)的實例。
3.特殊:雖然null也是對象,但是在這里this還是指向那個函數(shù)的實例,因為null比較特殊。
function fn() { this.user = "金毛"; return null; }; var a = new fn; console.log(a.user); //金毛
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/94011.html
摘要:數(shù)據(jù)管理,包括數(shù)據(jù)邏輯數(shù)據(jù)請求數(shù)據(jù)存儲等功能。負責處理的事件,并更新也負責監(jiān)聽的變化,并更新,控制其他的所有流程。上面代碼就是一個最簡單的類,構(gòu)造函數(shù)創(chuàng)建出來的對象自身有屬性,其原型上面有一個屬性。 JS題目總結(jié):原型鏈/new/json/MVC/Promise 1原型鏈相關(guān) showImg(https://segmentfault.com/img/remote/14600000161...
摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗Х妒?。函?shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。因此,...
摘要:在這次螞蟻金服的電話面試里面認識到了自己很多不足的地方吧。把字符串分割為字符串數(shù)組。從起始索引號提取字符串中指定數(shù)目的字符。通常消息包括客戶機向服務(wù)器的請求消息和服務(wù)器向客戶機的響應消息。 先簡短的介紹一下我自己吧,我是一個前端學習者,雖然我基礎(chǔ)知識也學了比較好,但是許久不用的知識就像流失的水,很容易就忘。在這次螞蟻金服的電話面試里面認識到了自己很多不足的地方吧。雖然在阿里內(nèi)推后的人才...
摘要:在這次螞蟻金服的電話面試里面認識到了自己很多不足的地方吧。把字符串分割為字符串數(shù)組。從起始索引號提取字符串中指定數(shù)目的字符。通常消息包括客戶機向服務(wù)器的請求消息和服務(wù)器向客戶機的響應消息。 先簡短的介紹一下我自己吧,我是一個前端學習者,雖然我基礎(chǔ)知識也學了比較好,但是許久不用的知識就像流失的水,很容易就忘。在這次螞蟻金服的電話面試里面認識到了自己很多不足的地方吧。雖然在阿里內(nèi)推后的人才...
摘要:之前寫過一篇文章面試官問能否模擬實現(xiàn)的和方法就是利用對象上的函數(shù)指向這個對象,來模擬實現(xiàn)和的。雖然實際使用時不會顯示返回,但面試官會問到。非嚴格模式下,和,指向全局對象 前言 面試官出很多考題,基本都會變著方式來考察this指向,看候選人對JS基礎(chǔ)知識是否扎實。讀者可以先拉到底部看總結(jié),再谷歌(或各技術(shù)平臺)搜索幾篇類似文章,看筆者寫的文章和別人有什么不同(歡迎在評論區(qū)評論不同之處),...
閱讀 3197·2021-09-22 15:52
閱讀 2967·2019-08-30 15:55
閱讀 2761·2019-08-30 15:53
閱讀 2512·2019-08-30 13:21
閱讀 1699·2019-08-30 13:10
閱讀 2546·2019-08-26 12:09
閱讀 2634·2019-08-26 10:33
閱讀 1882·2019-08-23 18:06