首页 / JAVASCRIPT / 创建对象的有哪几种模式?
创建对象的有哪几种模式?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了创建对象的有哪几种模式?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3062字,纯文字阅读大概需要5分钟。
内容图文
1 new Object()
先创建一个Object实例,然后为它添加属性和方法
var Person = new Object() Person.name = 'hl' Person.sayName = function () { console.log(this.name) }
2 对象字面量法
对象字面量法是创建对象最快捷方便的方式,在很多场景下被使用。
var Person = { name: 'hl', sayName: function () { console.log(this.name) } }
对象字面量法的缺点是创建多个同类对象时,会产生大量重复代码,因此有了工厂模式。
3 工厂模式
工厂模式用函数封装了创建对象的细节,调用函数时传入对象属性,然后返回一个对象。
function createPerson (name) { return { name: name, sayName: function () { console.log(this.name) } } } var person = createPerson('hl') var person = new createPerson('hl') // 寄生构造函数模式
通过使用 new 操作符也可以获得同样的结果,这种方法被叫做寄生构造函数模式,(应该)与直接调用函数没什么区别。
工厂模式虽然解决了创建多个同类对象的问题,却无法识别对象是哪种具体类型。
4 构造函数模式
通过构造函数创建的对象,可以使用 instanceof 操作符可以确定对象的类型。按照编程惯例,构造函数命名应该大写,以和普通的函数区别开来。
function Person (name) { this.name = name this.sayName = function () { console.log(this.name) } } p = new Person('hl') p instanceof Person // true
构造函数的特点:
没有显示的创建对象
属性和方法直接赋值给this
没有 return 语句
使用 new 操作符创建对象
构造函数的缺点是每个方法都会在每个实例上重新创建一遍,造成了内存浪费。
5 原型模式
使用原型模式,可以方便的为对象添加属性和方法。
function Person () { } var p = new Person() Person.prototype.name = 'hl' Person.prototype.sayName = function () { console.log(this.name) } p.sayName() // hl
原型具有动态性,即先创建对象再修改原型,实例也可以获得对应的属性和方法。
原型模式也并非没有缺点,第一,原型模式不能传递初始化参数,导致每个实例都会获得相同的属性;第二,对于引用类型的值,所有实例引用的是同一个对象,看下面的例子:
function Person () { } Person.prototype.relative = ['father','mother'] var person1 = new Person() var person2 = new Person() person1.relative.push('sister') console.log(person2.relative) // [ 'father', 'mother', 'sister' ]
修改person1的属性,person2的属性也被修改了。实例一般是需要有属于自己的属性的,因此很少单独使用原型模式。
6 组合使用构造函数模式和原型模式
创建对象最常用的方式,就是组合使用构造函数模式和原型模式。构造函数用于自定义属性,原型模式用于定义共享的属性和方法。
function Person (name) { this.name = name } Person.prototype.sayName = function () { console.log(this.name) }
7 动态原型模式
原型可以在构造函数中初始化,以便更好的封装对象创建过程。
function Person(name) { this.name = name if (typeof this.sayName !== 'function') { Person.prototype.setName= function (name) { this.name = name } Person.prototype.sayName = function () { console.log(this.name) } } }
不必用if检查每一个属性或方法,只需要检查原型初始化后应该存在的其中一个属性或方法即可。
8 稳妥构造函数模式
稳妥对象指的是没有公共属性,其属性和方法也不引用this对象,并且不使用 new 操作符创建对象。适合用在一些需要安全的环境中,防止数据被修改。
function Person (name) { return { sayName: function () { console.log(name) } } } var person = Person('hl')
稳妥模式创建的对象,除了使用构造函数内定义的方法,没有办法修改和访问传入到构造函数中的原始数据。
以上就是创建对象的有哪几种模式?的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的创建对象的有哪几种模式?全部内容,希望文章能够帮你解决创建对象的有哪几种模式?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。