JS-原型与继承-构造函数,普通对象,与prototype和__proto__理解
__proto__ 每一个变量都有这个属性,指向该对象的构造函数的原型对象。(指向这个对象的父级元素)
例如:
number类型
<script> let num = 123; console.log(num.__proto__); //Number构造函数 console.log(num.prototype); //undefined </script>
string类型
<script> let str = "123"; console.log(str.__proto__); //String构造函数 console.log(str.prototype); //undefined </script>
综上,可以看到,每一种变量都有__proto__属性,这个是绝对的,指向的是该变量(也可以说对象)的构造函数原型对象。
---------------------------------------------
prototype,这个属性,构造函数才有。(指向这个构造函数的原型对象)
上面这句话,不太好理解,看下面的代码:
<script> function User(){} //User是一个构造函数 let hd = new User(); //hd是构造函数的实例化对象 //hd作为一个构造函数的实例化对象,只有__proto__ //而User是一个构造函数,既是函数,也是对象 //作为一个函数,它有属性 prototype User.prototype是hd.__proto__ //作为一个对象,它有属性 __proto__ User.__proto是构造函数Function()的实例化对象 console.log(hd.__proto__); console.log(User.prototype); console.log(hd.__proto__ == User.prototype); //true </script>
关于prototype与__proto__容易让人疑惑的点是,构造函数也有__proto__属性。
之所以会这样,是因为构造函数也是一个对象,它是构造函数Function()的实例对象。
因此,所有构造函数的__proto__属性都指向Function构造函数的原型对象。
---------------------------------------------------------------------------------------------------------------------
同时,原型对象是特殊的对象,每个构造函数的原型对象都会有一个__proto__属性,共同指向构造函数Object()的原型对象。构造函数Object()的原型对象,作为除自身以外被所有原型对象指向的对象,其担当着根节点的角色,它的__proto__属性指向null。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律