1.生活类比
构造函数/类 = 图纸、模具、模板
比如蛋糕模具,规定蛋糕长什么样,有什么配料
实例=用模具压出来的真实蛋糕
模具只有一份,但是你可以做出无数个独立蛋糕,每一块蛋糕,都叫这个模具的实例。
// person 是模具、模板(构造函数)
function Person(name){
this.name = name
}
// p1 p2 是两块独立蛋糕,也就是实例
const p1 = new Person('zhangsan')
const p2 = new Person('lisi')
2、专业定义
通过new 构造函数()、new 类() 创建出来的具体对象,叫做该构造函数 类的实例
模板:抽象、通用,描述一类事物共有的特征
实例:具体、真实 独立,拥有属于自己的数据
为什么取名叫“实例”?
单词源头 instance 一个实实在在,具体出现的个体
实:真实、实际存在,不是抽象模板,构造函数只是一段代码,一个规则看不见摸不着,new出来的对象存在内存里,可以打印,修改属性,是实体。
例:例子 个体样本,它是这类事物其中一个具体样本
合起来 实实在在的一个样本个体=》实例
总结
1、实例 = 模板造出来的具体实体对象
2、叫实例是因为它是一类事物里真实存在的单个样本;
3、构造函数里的this,就代表当前正在new 正在创建的那一个实例。
区分
1、类构造函数 模板抽象
2、实例:有模板生成的具体对象 实体
3、实例化: new XXX()这个生成对象的动作,叫实例化。
例子
1、写 class cat{}==制作猫咪模板
2、const miao = new Cat() -》 执行实例化
3、miao => Cat的实例
另附 new 和 this
普通函数,this默认指向window 浏览器。 加new 变成构造调用,js强制改写this指向新建实例。
手写简易new,一眼看懂this绑定逻辑
function myNew(Constructor,...args){
// 1、创建空对象
const obj = {};
// 2、绑定原型
obj._proto_ = Constructor.prototype;
// 3、执行构造函数,把this 手动指定为 obj
const res = Constructor.apply(obj, args);
// 4、返回实例对象
return typeof res === 'object' ? res : obj;
}
function Dog(name){
this.name = name //实例属性
}
const dog = myNew(Dog,'wangwang');
console.log(dog.name)

发表回复