javascript原型链和作用域链的总结
原型链和作用域链的用途
原型链是用于查找属性的
作用域链是用于查找变量的
在函数内部使用一个变量时,如果这个变量在本作用域内找不到,就会到上一级的作用域中查找,
函数当前作用域的上级作用域为该函数被创建(或者说被定义)时所在的作用域,而不是函数被调用时所在的作用域
当调用一个对象的属性时,如果这个属性不是对象本身的属性,那就会依次沿着原型链向上查找,直到找到为止,若找到最上层也找不到,则返回undefined
对象所继承原型对象就是创建这个对象的函数的原型
例如自定义了函数test,那么在定义test函数时,就会默认使用Objec生成一个对象赋值给test函数的prototype属性,来作为test函数的原型
那么当使用new test()创建对象时,创建的对象就会继承test函数的原型,也就是test.prototype。因为是默认生成的空对象,并没有什么属性和方法被继承。
我们可以自定义test.prototype来实现想要继承的属性和方法
如test.prototype={a:1, b:2, m:function(){} }
一些内置对象如Array, Date,Number等其实就是函数,内部分别为这些函数定义的原型对象,具有某些属性和方法。
因此生成的数组对象和日期对象都会继承这些函数的原型对象而具有特定的属性和方法
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)