午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

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

javascript - js中 this的問題

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

問題描述

js小白 遇到的問題先上代碼

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

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

問題解答

回答1:

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

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

再次做下擴展,看下面的代碼

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

object.getName()方法返回的是一個匿名函數(shù),執(zhí)行環(huán)境是全局作用域,this的指向基于函數(shù)的執(zhí)行作用域所以是window,這個時候window.name是John。如果我們想返回lucy,就需要通過創(chuàng)建一個箭頭函數(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對象,就是定義時所在的對象,而不是使用時所在的對象。

至于你說的調(diào)試this指向改變問題,是因為匿名函數(shù)原本的作用域是window,但當執(zhí)行的時候是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,因為 getName 直接是 myObject 所調(diào)用的,所以這里的 this 指的是 ———— 調(diào)用函數(shù)的那個對象

回答3:

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

標簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 国产成人一区 | 亚洲超碰在线观看 | 国产女人高潮毛片 | 国产精品综合 | 成年人免费视频播放 | 日韩三级av| 国产精品九九 | 三浦理惠子av在线播放 | 亚洲精选av | 蘑菇福利视频一区播放 | 第四色av | 一级做a爱片性色毛片 | 久久免费播放视频 | 国产码视频 | 国产精品1区2区 | 国产视频在线一区二区 | 青草国产视频 | 亚洲精品影视 | 夜夜操天天爽 | 在线观看成人免费 | 五月婷婷六月丁香综合 | av久草 | a天堂在线观看 | 在线看亚洲 | 久久久久久久久久久久国产精品 | 在线看片亚洲 | 香蕉精品视频在线观看 | 国产三级短视频 | 好看的av在线 | 国产精品二三区 | 国产成人三级 | 久久久久国产精品视频 | 欧美成人精品激情在线观看 | 成人蜜桃网 | 亚洲成人欧美 | 国产久草视频 | 日韩精品一区二区视频 | 国产精品第 | 亚洲免费在线观看视频 | 成人在线网站 | 天堂99|