ItIron2021
Javascript
前两天这样搞下来,相信你们对this已经感到有些疲乏了,但打铁要趁热,我们今天就来看一下这系列最後一题与this直接相关的题目吧! 加油!
请问下方程序码的输出结果为?
var hero = {
_name: 'John Doe',
getSecretIdentity: function (){
return this._name;
}
};
var stoleSecretIdentity = hero.getSecretIdentity;
console.log(stoleSecretIdentity());
console.log(hero.getSecretIdentity());
今天来个厨神防雷
最终的输出结果为
undefined
John Doe
是的,当时面试的公司就直接把网路上的题目拿下来用? 你会觉得眼熟是很正常的。
这个题目其实相当的简单,只要你有搞清楚前两天的内容! 关键在於理解this指向哪,所以首先复习一下几个关键吧!
观念在手,接着我们很快地来解这道题目吧! 首先下方的程序码是回传一个函数
var stoleSecretIdentity = hero.getSecretIdentity;
注意,虽然它是从hero物件中拉出来的函数,但并不表示这函数就指向hero物件,上述的写法其实跟以下的写法等价
var stoleSecretIdentity = function (){
return this._name;
}
所以其实你还不确定这个this是指向谁的!
console.log(stoleSecretIdentity());
这里就清楚了,在全域环境中直接执行这个函数,this会指向window或global object,不管是哪个肯定都没有_name这个属性,结果自然会印出undefined
紧接着看最後一段的程序码
console.log(hero.getSecretIdentity());
这个就更简单了,执行这个函数时它指向的是hero物件,最终自然印出John Doe罗!
如果你觉得这样的概念相当难懂,那有两个可能性
你可以选择一个你喜欢的说法相信?
this
本文章同步发布於个人部落格,有兴趣的朋友也可以来逛逛~!
Redis丛集指令CLUSTER CLUSTER ADDSLOTS 设定Redis Server丛集...
NPM是Node Package Manager的缩写,中文直接翻的话就是Node包管理工具, 比较...
在回答问题前,我们可以先了解他们是做什麽用的,为什麽总是拿来被比较? 这里要先回忆一个观念: JS里...
在规模较大的企业网路中,为了避免单点故障会采用 LACP 的方式将多条线路聚合在一起使用,除了增加...
注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 买进 大同(2371)...