首页>>前端>>JavaScript->JavaScript创建对象的几种方式对比

JavaScript创建对象的几种方式对比

时间:2023-11-29 本站 点击:0

JavaScript本身是一个自由度很高的语言,面向过程编程,面向对象编程可以按照自己心意去开发,本质还是一个面向过程编程的语言,但如果引入适当的库或者自己定义好一些工具函数等,完成可以实现一个面向对象变成的开发方式。

这里简单对比下几种创建对象的方式。

工厂模式

顾名思义,比较固化的一种方式,但是胜在简单轻便

functioncreatePerson(name){varo=newObject()o.name=name;o.getName=function(){console.log(this.name)}returno}varperson=createPerson('kevin')

缺点: 对象无法识别,都指向一个原型

构造函数模式

在es6中可以等同于一个父类

functionPerson(name){this.name=name;this.getName=function(){console.log(this.name)}}varperson1=newPerson('kevin')

优点:实例可以识别为一个特定的类型

缺点:每次创建实例时,每个方法都要被创建一次

构造函数模式优化

functionPerson(name){this.name=name;this.getName=getName}functiongetName(){console.log(this.name)}varperson1=newPerson('kevin')

优点:解决了每个方法都要被重新创建的问题

缺点:违背了封装的初衷

原型模式

functionPerson(name){}Person.prototype={constructor:Person,name:'kevin',getName:function(){console.log(this.name)}}varperson1=newPerson()

优点:可以通过constructor属性找到所属构造函数

缺点:1.所有的属性和方法都共享,2.不能初始化参数

组合模式(构造函数模式+原型模式)

functionPerson(name){this.name=name;}Person.prototype={constructor:Person,getName:function(){console.log(this.name);}}varperson1=newPerson()

优点:该共享的共享,该私有的私有,使用最广泛的方式

缺点:分开写,不是最佳封装


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/JavaScript/713.html