搜索
写经验 领红包
 > 育儿

js创建对象的几种方式以及区别(js创建对象的几种方式有哪些)

导语:JS创建对象的几种方式

第一:工厂模式:代码如下

缺点:对象无法识别,因为原型都指向(Object)

function Person(name) { var obj = new Object(); obj.name = name; obj.say = function () { return "我是" + this.name; } return obj}var person = Person("Ayden")console.log(person.name)//Aydenconsole.log(person.say())//我是Ayden

第二:构造函数模式:代码如下

优点:实例可以识别为一个特定的类型,即可以分 ‘类’

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

function Person(name) { this.name = name ; this.say = function () { return "我是" + this.name ; }}var person = new Person("Ayden")console.log(person)

构造模式优化:代码如下

推荐下我的前端群:589651705,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括我自己整理的一份前端资料和零基础入门教程,欢迎初学者和在进阶中的小伙伴。

优点:解决了 “每次创建实例时每个方法都要被创建一次“” 的问题

缺点:面向对象三大特性之一——封装。这叫啥封装?

function Person(name) { this.name = name ; this.say = say}function say() { return "我是" + this.name;}var person = new Person("Ayden")console.log(person)

第三:原型模式:代码如下

优点:实例的方法不会重新创建

缺点:1. 所有的属性和方法都共享 2. 不能初始化参数 3.总想把代码写到一起,即封装

function Person() {}Person.prototype.name = "Ayden";Person.prototype.say = function () { return "我是" + this.name}var person = new Person();console.log(person)

原型模式优化:代码如下

优点:封装性好些

缺点:丢失了constructor属性

function Person() {}Person.prototype = { name :"Ayden", say :function () { return "我是" + this.name }}var person = new Person()

原型模式再优化:

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

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

function Person() {}Person.prototype = { constructor: Person, name: "Ayden", say: function () { return "我是" + this.name }}var person = new Person()

第四:混合模式:代码如下:

推荐下我的前端群:589651705,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括我自己整理的一份前端资料和零基础入门教程,欢迎初学者和在进阶中的小伙伴。

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

缺点:希望全部写在一起,即更好的封装性

function Person(name) { this.name = name ; } Person.prototype = { say:function () { return "我是" + this.name } } var person1 = new Person("Ayden"); var person2 = new Person("Tom")

本文内容由快快网络小媛创作整理编辑!