av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript - js中 this的問(wèn)題

瀏覽:122日期:2023-05-18 09:49:13

問(wèn)題描述

js小白 遇到的問(wèn)題先上代碼

var name = 'John';var myObject = function() { return {getName: function() { return this.name;} }}();alert(myObject.getName());

輸出的結(jié)果是undefined 我的問(wèn)題是1. return里面的getName的function是不是匿名函數(shù) 我現(xiàn)在理解的是匿名函數(shù) 那么這個(gè)this應(yīng)該就是指向全局吧?就是window 那為啥不輸出john 2.讓我更困惑的是,我在調(diào)試時(shí)候一步步走,走到this.name的時(shí)候,this指向的是Object 而當(dāng)輸出完undefined的時(shí)候,我在監(jiān)視那里的this變成了window,this.name也變成了john,不太明白,求大蝦解救!

問(wèn)題解答

回答1:

這個(gè)問(wèn)題需要一步一步看,首先是myObject是一個(gè)對(duì)象,上面有個(gè)屬性是getName,值是一個(gè)匿名函數(shù),alert(myObject.getName());,就是這個(gè)對(duì)象在調(diào)用這個(gè)方法,所有這個(gè)時(shí)候的this就是undefined。

//var name = 'John';var myObject = function() { return {getName: function() { return this.name;} }}();var f = myObject.getName;alert(f()); //John// 這樣就返回的是John,因?yàn)檫@個(gè)時(shí)候的getName是在全局執(zhí)行的,this指向的就是window。var name = 'John';var myObject = function() { return {getName: () => { return this.name;} }}();alert(myObject.getName()); //John// 也可以通過(guò)es6修正this的指向

再次做下擴(kuò)展,看下面的代碼

var object = {name: ’lucy’,getName: function() { return function () {return this.name }} } console.log(object.getName()()) //John

object.getName()方法返回的是一個(gè)匿名函數(shù),執(zhí)行環(huán)境是全局作用域,this的指向基于函數(shù)的執(zhí)行作用域所以是window,這個(gè)時(shí)候window.name是John。如果我們想返回lucy,就需要通過(guò)創(chuàng)建一個(gè)箭頭函數(shù)或者閉包來(lái)實(shí)現(xiàn)。

var object = { name: ’lucy’, getName: function() { console.log(this)return () => { return this.name} }} console.log(object.getName()()) //lucy var object = { name: ’lucy’, getName: function() {var that = this;return function () { return that.name} }} console.log(object.getName()()) //lucy

箭頭函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。

至于你說(shuō)的調(diào)試this指向改變問(wèn)題,是因?yàn)槟涿瘮?shù)原本的作用域是window,但當(dāng)執(zhí)行的時(shí)候是myObject調(diào)用了它,所以this在那一刻指向了myObject。

回答2:

var name = 'John';var myObject = function() { return {getName: function() { return this.name;}, name: ’eczn’ }}();myObject.getName(); // => // 'eczn'

getName 的 this 指的是 myObject,因?yàn)?getName 直接是 myObject 所調(diào)用的,所以這里的 this 指的是 ———— 調(diào)用函數(shù)的那個(gè)對(duì)象

回答3:

myObject.getName()通常情況下誰(shuí)調(diào)用了某個(gè)函數(shù),這個(gè)函數(shù)中的this就指向誰(shuí)啦

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 精品久久久久久亚洲精品 | 亚洲国产18 | 免费观看一级视频 | 97人澡人人添人人爽欧美 | 亚洲网站在线播放 | 91av免费版 | 日韩国产一区二区三区 | 国产精品国产亚洲精品看不卡15 | 中文字幕在线观看第一页 | 天天摸天天看 | 亚洲欧美v | 成人伊人网 | 国产精品高潮呻吟久久av黑人 | 91精产国品一二三区 | 日韩一区二区在线视频 | 亚洲五码久久 | 亚洲精品乱码久久久久久按摩观 | 亚洲精品久久久久久国产精华液 | 成人永久免费 | 国产一区二区三区四区三区四 | 国产在线观看网站 | 一级做a | 久久综合一区二区 | 亚洲影音 | 国产高潮好爽受不了了夜色 | 日韩成人在线视频 | 蜜桃一区二区三区 | 国产99久久精品一区二区永久免费 | 成人欧美一区二区三区色青冈 | 国产综合精品一区二区三区 | 国产91亚洲精品 | 久久精品视频一区二区三区 | 亚洲欧美一区二区三区情侣bbw | 一区二区电影网 | av男人的天堂在线 | 成人免费大片黄在线播放 | 亚洲一区二区免费视频 | 雨宫琴音一区二区在线 | 亚洲综合视频 | 国产一级特黄真人毛片 | 午夜精品网站 |