面向前端工程师的设计模式-原型模式

1. 介绍

原型模式(Prototype Pattern)不是指的 JS 的原型,它是 clone 自己,生成一个新对象的操作。因为 new 一个新对象的时候开销会比较大,或者由于其他原因不合适,所以采用这种方式创建一个一模一样的对象。

Java 默认有 clone 接口,不用自己实现。JS 中有一个比较像的实现就是 Object.create 方法。

2. 原型模式的通用实现​

// 一个对象(作为原型)
const prototype = {
  getName: function() {
    return this.first + '' + this.last;
  },
  say: function() {
    console.log('hello world');
  }
}

// 基于原型创建 x
let x = Object.create(prototype);
x.first = 'A';
x.last = 'B';
console.log(x.getName());
x.say();

// 基于原型创建 y
let y = Object.create(prototype);
y.first = 'C';
y.last = 'D';
console.log(y.getName());
y.say();

3. JavaScript中的原型​

3.1 函数和对象​

//函数是一种对象
function Person() {}
console.log(Person instanceof Object);

//对象都是通过函数创建的
let p1=new Person();
let obj1={name: 'zfpx'}
let obj=new Object();
obj2.name='zfpx';

3.2 原型对象prototype​

let sum = new Function('a','b','return a+b');

3.3 instanceof​

console.log(Object instanceof Function);
console.log(Function instanceof Object);
console.log(Function instanceof Function);

3.4 原型链​

function Foo(){
    this.a = 10;
}
Foo.prototype.b = 20;

let f1  = new Foo();
console.log(f1.a);
console.log(f1.b);

3.5 原型优势​

let obj = {};
console.log(obj.toString());


let arr = [1,2,3];
// Array继承Object
// Array原型上的的方法对Object原型上的方法进行了重写
console.log(arr.toString());
// Object原型上的方法
console.log(Object.prototype.toString.call(arr));

4. 场景​




    
    
    
    Document
    


    
    

展开阅读全文

页面更新:2024-05-27

标签:原型   模式   可能会   重写   开销   变量   函数   属性   对象   工程师   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top