文档章节

Js 创建对象的几种方式及优缺点

IT追寻者
 IT追寻者
发布于 2016/06/24 13:31
字数 422
阅读 300
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

###一、工厂模式

function createPerson(name, age, job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.getName = function () {
        return this.name;
    }
    return o;//使用return返回生成的对象实例
}
var person = createPerson('Jack', 19, 'SoftWare Engineer');

缺点:无法识别对象类型,因为创建对象都是使用Object的原生构造函数来完成的;每个对象都有自己的getName 函数,不能共享同一个函数。 ###二、构造函数方式

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.getName = function () {
        return this.name;
    }
}
var person1 = new Person('Jack', 19, 'SoftWare Engineer');

var person2 = new Person('Liye', 23, 'Mechanical Engineer');

缺点:构造函数会重复生成函数,不能共享同一个函数。 ###三、原型方式

function Person(){
}
Person.prototype.name = 'Jack';//使用原型来添加属性
Person.prototype.age = 29;
Person.prototype.getName = function(){
    return this.name;
}

缺点:构造函数没有参数,不能通过构造函数初始化属性值;属性是对象时被多个实例共享容易产生问题。 ###四、组合构造函数及原型模式

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.lessons = ['Math', 'Physics'];
}
Person.prototype.getName=function()
{
    return this.name;
}

优点:所有非函数属性都在构造函数创建可以用构造函数赋予属性默认值,所有实例共享一个方法,没有浪费内存,没有副作用【推荐】。 ###五、动态原型方法

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.lessons = ['Math', 'Physics'];
    if(typeof Person._initialized=="undefined")
        {
            Person.prototype.getName=function()
                {
                    return this.name;
                }
            Person._initialized=true;
        }
}

优点:拥有方法四的优点同时更像其他语言中类的定义了。【推荐】

最终结论:推荐使用组合构造函数及原型模式和动态原型方法(jQuery类型的封装就是使用组合模式)。

© 著作权归作者所有

IT追寻者

IT追寻者

粉丝 32
博文 469
码字总数 70242
作品 0
海淀
高级程序员
私信 提问
加载中

评论(0)

JS 总结之原型继承的几种方式

在之前的总结中,我们详细分析了原型《JS 总结之原型》,原型很大作用用于模拟继承,这一次,我们来聊原型继承的几种方式。 🌶 前提 以一个父类为前提条件,列举 js 继承的继承方式: 🍖...

Karon_
2018/12/24
0
0
[回炉计划]- javascript七大继承实现

仓库地址:github.com/re-learning… js 有没有类的概念,js 的继承是怎样的? 本身不提供一个实现,(即使在中引入了关键字,但那只是语法糖,仍然是基于原型的),本质上是一个函数。 当谈到继...

前端指南小组
2019/05/25
0
0
JavaScript中的函数继承

面向对象和基于对象 几乎每个开发人员都有面向对象语言(比如C++、C#、Java)的开发经验。在传统面向对象的语言中,有两个非常重要的概念——类和实例。类定义了一些事物公共的行为和方法;而...

倔强的石头
2018/12/04
0
0
JavaScript基础专题之创建对象几种方式及优缺点(九)

前言 根据《JavaScript高级程序设计》(红宝书)来总结一下创建对象的几种方式及优缺点 1. 工厂模式 缺点:对象无法识别,因为所有的实例都指向一个原型 2. 构造函数模式 优点:实例可以识别...

Chris_Ping
2019/07/08
0
0
JavaScript基础专题之类型检测(十一)

基本类型 我们都知道 JavaScript 语言的每一个值都属于某一种数据类型。 JavaScript 的数据类型,共有分为七种: 数值(number):整数和小数(比如1和3.14) 字符串(string):文本(比如H...

Chris_Ping
2019/07/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springBoot之配置文件的读取以及过滤器和拦截器的使用

springBoot之配置文件的读取以及过滤器和拦截器的使用 前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务。但是想将之前的工程作为一个项目来说,那些是仅仅不够的。可能还...

鹏十二
13分钟前
17
0
Springboot在Idea Intellij汉字Unicode读取乱码问题

问题核心:Unicode编码中的字母需要小写。比如\u8bbe\u5907\u53f7 首先,了解清楚Unicode编码是什么东西。请读者自己搜索。 然后,我们要清楚springboot是怎么加载配置文件的。兴趣的读者可以...

sunranhou
18分钟前
11
0
服务器管理规范

1、为了保证服务器的安全,服务器的账号密码不能随便透露给他人,必须指定人员负责管理。 2、服务器至少要安装360安全卫士。以此保障服务器的安全。 3、服务器要设置定期重启(可以使用命令 ...

ethanleellj
20分钟前
21
0
工厂方法

1. 介绍 工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期...

steven-黄笑笑
22分钟前
4
0
Ubuntu 18.04 安装GRASS GIS 7.8.3

在之前的Ubuntu 16.04 安装 Grass gis 7.6.1中主要是通过添加ppa源的方法安装预编译包,但由于众所周知的原因可能会失败,所以最好的安装方法是下载源码后自己编译安装,下面是安装步骤: 安...

ddd口木呆
23分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部