加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

一文看懂JS创建对象的几种方法

发布时间:2022-04-20 09:41:57 所属栏目:语言 来源:互联网
导读:很多人在学习JavaScript时,对于JavaScript创建对象的几种模式不是很理解,这篇文章对工厂模式,构造函数模式,原型模式这三种模式做除了详细介绍,希望对大家学习JS创建对象有所帮助。 创建对象的几种模式: 工厂模式: 工厂是函数的意思。工厂模式核心是定
       很多人在学习JavaScript时,对于JavaScript创建对象的几种模式不是很理解,这篇文章对工厂模式,构造函数模式,原型模式这三种模式做除了详细介绍,希望对大家学习JS创建对象有所帮助。
 
       创建对象的几种模式:
       工厂模式:
       工厂是函数的意思。工厂模式核心是定义一个返回全新对象的函数。
 
 function getObj(name, age) {
  let obj = {}
  obj.name = name
  obj.age = age
  return obj
 }
 let person1 = getObj("cc", 31)
       缺点:不知道新创建的对象是什么类型
 
       构造函数模式:
       通过一个构造函数,得到一个对象实例。
       构造函数和工厂模式区别是:
       1,构造函数函数体加了this
       2,构造函数没有return
       3,构造函数调用时,用new关键字
 
 function CreateObj(name, age) {
  this.name = name
  this.age = age
 }
 let person1 = new CreateObj("cc", 31)
 console.log(person1)
 console.log(person1.constructor === CreateObj); // true
 console.log(person1 instanceof CreateObj); // true
       关于构造函数的两个问题:
       1,构造函数和普通函数唯一区别是调用方式。构造函数要用new关键字。如果不用new,则是往Global对象上加属性。下面例子中,CreateObj方法,往window对象上加了name和age属性
 
 function CreateObj(name, age) {
  this.name = name
  this.age = age
 }
 CreateObj('cc', 10)
 console.log(window.name) // 'cc'
       2,构造函数存在的问题: 构造函数体内的方法,每次创建一个实例,都会创建一遍。
 
person1.sayName( ) === person2.sayName( ) // false
       解决方法是,将sayName定义在createObj外面。
 
       原型模式:
       原理是,每个函数都有一个prototype属性。prototype是一个对象,里面定义的属性和方法会被所有实例共享。
       关于原型模式,有两个等式:
 
 function Person() { }
 let person1 = new Person()
 console.log(person1.__proto__ === Person.prototype)  // true
 console.log(Person.prototype.constructor === Person); // true
       关于原型对象的三个方法:isPrototype , getPrototypeof,setPrototypeOf, Object.create()

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读