广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js中常见的4种创建对象方式与优缺点
  • 198
分享到

js中常见的4种创建对象方式与优缺点

2024-04-02 19:04:59 198人浏览 泡泡鱼
摘要

目录前言1、工厂模式2、构造函数模式3、原型模式4、Object.create()其他模式总结前言 说起创建对象,最容易想到的便是通过对象字面量方式直接定义一个对象吧,但这种方式只能

前言

说起创建对象,最容易想到的便是通过对象字面量方式直接定义一个对象吧,但这种方式只能创建少量,单独且相互间无联系的对象。若要批量创建对象,该如何?

1、工厂模式

实现:

function fn(a,b){
    let obj = new Object()
    obj.a=a
    obj.b=b
    return obj
}

const test = fn(1,2)

优点:解决了创建多个类似对象的问题

缺点:没解决对象标识问题(即新建对象是什么类型)

2、构造函数模式

实现:

function Fn(a,b){
    this.a=a
    this.b=b
    this.c=function(){
          console.log(this.a)
    }
}

const test1 = new Fn(1,2)
const test2 = new Fn(1,2)
console.log(test1.c === test2.c)// false

优点:new隐式创建对象,写法简洁

缺点:构造函数定义的方法会在每个实例上都要创建一遍(除非该方法声明提到全局)

3、原型模式

实现:

function Fn(a,b){
    Fn.prototype.a=a
    Fn.prototype.b=b
    Fn.prototype.c=function(){
          console.log(a)
    }
}

const test = new Fn(1,2)

优点:构造函数中定义的属性和方法都可以被对象实例共享

缺点:原型上的属性值如果是引用值,该值会在创建后的实例之间被污染,如下

function Fn(){
    Fn.prototype.a=[1,2]
}

const test1 = new Fn()
const test2 = new Fn()
test1.a.push(3)
console.log(test1.b, test2.b)// [1,2,3] [1,2,3] 
const test3 = new Fn()// 原型上属性会重新赋值
console.log(test1.b, test2.b,test3.b)// [1,2] [1,2] [1,2] 

4、Object.create()

实现:

const obj = { a:1 , b:2 }

const test = Object.create(obj)
console.log(test.a)// 1

优点:通过一个对象构造另一个对象

缺点:构造过程是浅克隆,共享的引用值依旧存在被污染问题

其他模式

除了以上几种常见的模式外,批量创建对象的方式还有

  • 动态原型模式:仅在第一次调用构造函数时,将方法赋给原型对象的相应属性,其他示例的处理方式同构造函数模式
  • 寄生构造函数模式:仅仅封装创建对象的代码,然后再返回新创建的对象,仍使用new操作符调用
  • 稳妥构造函数模式:没有公共属性,只有私有变量和方法,以及一些get/set方法,用以处理私有变量。

总结

到此这篇关于js中常见的4种创建对象方式与优缺点的文章就介绍到这了,更多相关js常见创建对象方式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: js中常见的4种创建对象方式与优缺点

本文链接: https://www.lsjlt.com/news/163591.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • js中常见的4种创建对象方式与优缺点
    目录前言1、工厂模式2、构造函数模式3、原型模式4、Object.create()其他模式总结前言 说起创建对象,最容易想到的便是通过对象字面量方式直接定义一个对象吧,但这种方式只能...
    99+
    2022-11-13
  • js 创建对象的多种方式与优缺点小结
    目录早期创建方式工厂模式构造函数模式构造函数模式优化原型模式构造函数和原型模式组合动态原型模式寄生构造函数模式稳妥构造函数模式早期创建方式 var obj = new Objec...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作