javascript有关this的那些事(某渣提出的问题)
某人提出
请教下谁能解释下这个值
var name = "The Window";
var object = {
name: "My Object",
getName: function () {
return this.name;
}
};
alert((object.getName = object.getName)());
--------The Window
经过解释之后
object.getNameFunc()(); 我理解是the window,
但是(object.getName = object.getName)() 怎么也是the window呢?
var a = 1;
a = a返回啥,你就知道为什么是the window了
最后某神举例
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return this.name;
}
};
var a = object.getNameFunc;
alert(a());//The Window
alert(object.getNameFunc()); //My Object
最后某神解释
所以执行a()的时候this指向window
this.name就是window.name
object.getName = object.getName;
alert(object.getName()); //My Object
alert((object.getName = object.getName)());//"The Window"
还是不明白 为啥第一个是obj 第二个是window
这个解释怎么理解啊
最后他明白了
某渣:我大概明白了 执行
alert((object.getName = object.getName)); 返回
function () {
return this.name;
}
这里this 就是window了
某渣:是吧
就是这
某渣:就是一对()返回一个函数
(object.getName = object.getName)返回的实际上是=运算的结果
某渣:多谢大家
圆满解决
某神总结
当一个函数作为函数而不是方法来调用的时候,this指向的是全局对象
当函数作为某个对象的方法来调用时,this指向那个对象
object.getNameFunc() ,此时的 object.getNameFunc 为引用类型,其 base 为 object,this 指向的是 base,所以返回 object.name 的值
name = object.getNameFunc, test 作为标识符,生成了其他引用类型的值,此时 base 已经从 object 重置为 null,也就是会指向 global(window),所以返回的是 window.name 的值。
问题的关键在于「引用类型(type Reference)的中间值发生改变」
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架