ProtoType原型和__Proto__原型链的详解
var arr = new Array(12,13,14,15,16,17,18); var arr2 = new Array(12,13); arr.sun=function(){
//用原型加Array.prototype.sun=function() 下面的alert(arr2.sun())生效,就不会出现说arr2没有sun方法,这就好像css里面的class给一组元素加样式
//如果只是arr.sun,就好像是行间样式alert(arr2.sun())不会生效,因为他没有想arr那样加sun方法 var reun = null; for(var i=0;i<this.length;i++){ reun+=this[i] } return reun; }
alert(arr.sun()) alert(arr2.sun())
// prototype函数才有的属性(prototype为函数增加方法(共用)) __proto__对象才有的属性(所以函数也有这个__proto__只不过为隐形的) // 最终他们是相等的 → console.log(__proto__===constructor.prototype) //ture var a = {} console.log(typeof a.prototype)//undefined console.log(a.__proto__)//对象集合 console.log(typeof a.__proto__) //object var b = function(){} console.log(typeof b.prototype)//object console.log(b.prototype)//b{} console.log(typeof b.__proto__)//function console.log(b.__proto__)//function(){} // 原型链 // 因为__proto__是任何对象都有的属性 在js中万物皆对象 所以会形成一个__proto__连起来的链条 递归访问到最后 值为空
var c = function(){}
var d = new c()
console.log(typeof d.__proto__) //object
console.log(d.__proto__)//c() 构造器fucntion c的原型对象
console.log(typeof d.__proto__.__proto__)//object
console.log(d.__proto__.__proto__)//object() 构造器fucntion object的原型对象
console.log(typeof d.__proto__.__proto__)//object
console.log(d.__proto__.__proto__.__proto__)//null
所有对象都有隐形原型(__proto__)
let a = 123
console.log(a.__proto__)
console.log(''.__proto__)
以上都会打印出 该对象所拥有的方法
原型的概念很简单
所有对象都有一个属性 __proto__ 指向一个对象,也就是原型
每个对象的原型都可以通过 constructor 找到构造函数,构造函数也可以通过 prototype 找到原型
所有函数都可以通过 __proto__ 找到 Function 对象
所有对象都可以通过 __proto__ 找到 Object 对象
对象之间通过 __proto__ 连接起来,这样称之为原型链。当前对象上不存在的属性可以通过原型链一层层往上查找,直到顶层 Object 对象
原型链的本质是链表。 原型链上的节点是各种原型对象,
什么是原型对象呢 js里面有很多内置的类 比如 function object string number 所谓原型对象就是这些类的prototype的属性值
原型链通过_proto_属性连接各种原型对象
最后实例化说下这两者的关系
描述new一个对象的过程 创建完对象后 实例化 之后这个实例化的对象能够获取到原型(prototype)上的方法 如果获取不到就会去构造函数中查找一直到最后为null 这个找的过程就可以称为原型链(__proto__)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示