JavaScript设计模式(原型模式)

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容