1. 原型模式的定义
要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它。
const Plane = function () {
this.blood = 100;
this.attackLevel = 1;
this.defenseLevel = 1;
};
const plane = new Plane();
plane.blood = 500;
plane.attackLevel = 10;
plane.defenseLevel = 7;
const clonePlane = Object.create(plane);
console.log(Object.getPrototypeOf(clonePlane)); // 输出:Object {blood: 500, attackLevel: 10, defenseLevel: 7}
Object.create = Object.create || function (obj) {
const F = function () { };
F.prototype = obj;
return new F();
}
2. 场景
2.1 JavaScript中的原型
- 每个函数都有一个属性叫做
prototype
。 -
prototype
的属性值是一个对象,默认的只有一个叫做constructor
的属性,指向这个函数本身。 - 每个对象都有一个隐藏的属性
__proto__
,这个属性引用了创建这个对象的函数的prototype
。
2.2 instanceof
- Instanceof运算符的第一个变量是一个对象,暂时称为A;第二个变量一般是一个函数,暂时称为B
- Instanceof的判断规则是:沿着A的
__proto__
这条线来找,同时沿着B的prototype
这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。
console.log(Object instanceof Function);//true
console.log(Function instanceof Object);//true
console.log(Function instanceof Function);//true