工厂模式,构造函数模式,原型模式等方法比较与利弊分析

本文探讨JavaScript中面向对象的三种主要创建对象的方式:工厂模式、构造函数模式和原型模式,分析它们的特点、优缺点。工厂模式解决创建相似对象问题但无法识别对象类型;构造函数模式通过new操作创建对象,但可能导致重复定义方法;原型模式通过共享属性和方法解决此问题,但也带来了一些挑战,如属性共享导致的问题。
摘要由CSDN通过智能技术生成

JS基于面向对象的创建对象,主要有工厂模式、构造函数模式、原型模式三种。本文主要分析了这三种模式的特点、利弊,以及一些细节问题。
参考:js高程 红宝书(第四版)

一、工厂模式

function createPerson(name, age, job) { 
    let o = new Object(); 
    o.name = name; 
    o.age = age; 
    o.job = job; 
    o.sayName = function() { 
        console.log(this.name); 
    }; 
    return o; 
} 
let person1 = createPerson("Nicholas", 29, "Software Engineer"); 
let person2 = createPerson("Greg", 27, "Doctor");
  • 优点:创建多个相似对象的问题
  • 缺点:没有解决对象识别问题(即新创建的对象是什么类型?)

二、构造函数模式

function Person(name, age, job){ 
    this.name = name; 
    this.age = age; 
    this.job = job; 
    this.sayName = function() { 
        console.log(this.name); 
    }; 
} 
let person1 = new Person("Nicholas", 29, "Software Engineer"); 
let person2 = new Person("Greg", 27, "Doctor"); 

person1.sayName(); // Nicholas 
person2.sayName(); // Greg

1. 构造函数模式 与 工厂模式 是比较像的,只是有如下区别:

  • 没有显式地创建对象
  • 属性和方法直接赋值给了 this
  • 没有 return
  • 函数名 Person 的首字母是大写

2. 用 new 调用构造函数会执行如下操作:

  • 内存中创建一个新对象。
  • 这个新对象内部的 [[Prototype]] 特性被赋值为构造函数的 prototype 属性
  • 构造函数内部的 this 被赋值为这个新对象(即 this 指向新对象)。
  • 执行构造函数内部的代码(给新对象添加属性)。
  • 如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象

3. 构造函数的问题:

  • 其定义的方法在每个实例上都创建一遍,不同实例的方法不是同一个 Function 实例(JS 中函数是对象,因此每次定义函数时,都会初始化一个对象。)
function Person(name, age, job){
    
    this.name = name; 
    this.age = age; 
    this.job = job; 
    this.sayName = new Function("console.log(this.name)")
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值