首页 > 其他 > 详细

原型与原型链

时间:2021-01-13 21:02:10      阅读:29      评论:0      收藏:0      [点我收藏+]

原型:用来生产实例对象。

原型链:原型对象有个指针指向构造函数,实例对象又有一个指针指向原型对象,就形成了一条原型链,最终指向null。

技术分享图片

如上图,SuperType是是一个函数,右侧的方框就是它的原型。

var fn = new Fn();

fn对象是从Fn函数new出来的,这样fn对象就可以调用Fn.prototype中的属性。

因为每个对象都有一个隐藏的属性——“__proto__”,这个属性引用了创建这个对象的函数的prototype。即:fn.__proto__ === Fn.prototype,对象都是函数创造出来的,而对象也可以理解为是属性的集合

每个函数function都有一个prototype,即原型。每个对象都有一个__proto__,即隐式原型。

每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。只有Object.prototype的__proto__指向的是null

接下来就是这张经典的图,instanceof的原理也是基于原型链的查找。

javascript中包含六种基本数据类型和一种复杂数据类型,他们又可以被分为值类型(undefined boolean string number)和引用类型(object)

对于值类型,可以通过typeof判断,string/number/boolean都很清楚,但是typeof在判断到引用类型的时候,返回值只有object/function,这个时候就需要用到instanceof

技术分享图片

通过原型链的查找,可以解答一些很容易出错的问题,例如:

技术分享图片

第一句说明Object是Function的实例,图中可以看到Object.__proto__==Function.prototype;第二句Function.__proto__==Object.prototype;第三句是因为function是自身的实例,由自身创建。

原型链的构建是为了实现js中的继承。访问一个对象的属性,先查找基本属性,然后从.__proto__链中向上查找,hasOwnProperty()方法就是为了检测对象的属性属于自身还是原型。

本文参考https://www.cnblogs.com/wangfupeng1988/p/3977924.html

原型与原型链

原文:https://www.cnblogs.com/zhouyyBlog/p/14274256.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!