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