0、目录:1、基本概念:
1)原型相关基本概念 2)原型链的概念和理解 3)构造函数new的理解
构造函数:
- 可以理解为创建对象实例的模版,为了避免多个结构类似的对象的反复创建,提取重复的结构进行封装,就是构造函数;1)原型对象:(prototype ,也叫原型)
- 首先它本质是对象,任何函数创建时候都会默认创建prototype;
- 其次它被构造函数用来存放大家共享的属性和方法,从而实现节省空间;
2)对象原型:(__proto__ ,对象原型)
- 每个对象创建时默认创建__proto__属性,指向其构造函数的原型;
- 如:{}.__proto__ === Object.protorype;
3)constructor属性:
- 每个原型对象默认创建的属性,指向起构造函数;
- 注意:实例对象也能调用constructor,不代表其本身有这个属性,而是借用了原型;4)三者关系汇总:
- 构造函数通过原型对象prototype存储共享方法;
- 对象实例通过对象原型__proto__找到原型对象prototype中的方法;
- 原型对象/对象原型通过constructor属性找到其构造函数,如下所示:
文章图片
2、原型链
定义:原型链是对象查找其内部属性/方法的链条。
- 如上:
- 对象实例ldh在自己身上没找到要查找的属性,就通过__proto__找到Star的原型对象;
- 而Star的原型对象的__proto__指向的是Object的原型对象prototype;
- 而Object的原型对象prototype的原型__proto__指向的是null。
- 整个的查找过程就是原型链,具体是:
dh->Star.prototype->Object.prototype->null
问题:构造函数创建对象实例是通过new实现的,那么其本质是什么呢?
答:函数内部this定义的是共享属性,不用this的是私有属性 实际上它就做了三件事情:
- 创建一个新的对象;
- 新对象的proto指向构造函数的原型prototype;
- 将构造函数的作用域传递给实例,并执行构造函数,继而实例获得了共享的属性;
funcrion Fa () {
this.name = 'fa';
}let fa1 = new Fa();
// 核心三步
let fa2 = {};
fa2.__proto__ = Fa.constructor;
Fa.call(fa2);console.log(fa1.name, fa2.name);
推荐阅读
- 选择篇(022)-下面代码的输出是什么?
- 从0到1搭建组件库
- JS中 &&、|| 和 & 、| 的使用
- Mac 上制作 SSL 证书
- JavaScript 基本数据类型转换
- 微信商城小程序开发方式有哪些()
- Form 表单在数栈的应用(下)(深入篇)
- 选择篇(019)-下面代码的输出是什么?
- 选择篇(020)-下面代码的输出是什么?
- 选择篇(018)-下面代码的输出是什么?