首页 > 编程知识 正文

js中的原型和原型链,js原型和原型链你只要看这一篇

时间:2023-05-03 23:51:30 阅读:249001 作者:1126

参考:https://blog.csdn.net/yucihent/article/details/79424506
文章内的图是参考一个大神的 但是找不到链接了

一. 函数对象 所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型)所有函数拥有prototype属性(显示原型)(仅限函数) var a = {}; console.log(a.prototype); //undefined console.log(a.__proto__); //Object{} var b = function(){}; console.log(b.prototype); //Object{} console.log(b.__proto__);//function(){} 由上述代码可知,prototype是函数才有的属性 原型对象:拥有prototype属性的对象,在定义函数时就被创建原型对象的结构: Function.prototype ={constructor:Function,__proto__ : parent prototype,some prototype properties:}; 二. __proto__属性指向

__proto__属性指向取决于对象创建时的实现方式

方式一:字面量方式

var a = {};

方式二:构造器方式

var A = function(){};
var a = new A();

方式三:Object.create()方式

var a1 = {};
var a2 = Object.create(a1);

> 大多数情况下,__proto__可以理解为“构造器的原型”,即__proto__ === constructor.prototype>(实例的隐式原型指向它构造函数的显示原型 这里的指向即恒等于)

这句话的理解可参考以下文章中的图
https://blog.csdn.net/qq_43553067/article/details/88075690

三: 原型和原型链

什么是原型链?

由于__proto__是任何对象都有的属性,而js万物皆对象,所以会形成一条__proto__链接起来的链条,递归访问__proto__必须最终到头,并且值是null
当js引擎查找对象的属性时,先查找对象本身是否存在属性。如果不存在,会在原型链(其构造函数的prototype)上查找

示例

var A = function(){}var a = new A();

如图所示

- a.__proto__ ——> A.prototype(构造器function A 的原型对象) - a.__proto__.__proto__ ——> Object.prototype(构造器 function object的原型对象) - a.__proto__.__proto__.__proto__ ——> null

示例:

Function.prototype.a = "a"; Object.prototype.b = "b"; function Person(){} console.log(Person); //function Person() var p = new Person(); console.log(p); //Person {} 对象 console.log(p.a); //undefined console.log(p.b); //b
JMeter 扩展开发:自定义 Java Samplervue parseHTML函数源码解析start钩子函数前端node Session和JWT鉴权登录怎么实现k8s部署Rancherssh隧道

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。