创建单个对象——字面量方式

创建多个对象

使用字面量方式创建多个对象时,会产生大量的重复代码。开发者在寻找创建多个对象方法的过程中,基本经历了一下集中方法:

工厂模式 > 构造函数模式 > 原型模式 > 构造函数与原型组合 > 寄生构造函数 > 稳妥构造函数模式

工厂模式

function CreatePerson(name, age, job){
var o = new Object(); o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
}
return o;
}

构造函数模式

function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.ageName = sayName;
} function sayName(){
alert(this.name);
}

原型模式

function Person(){
} Person.prototype.name = "xiong";
Person.prototype.age = "26";
Person.prototype.job = "FE";
Person.prototype.sayName = function(){
alert(this.name)
};

问题:当原型上包含引用类型的值得情况下,所有实例会共享该引用类型值。即任何一个实例修改该引用类型值,其他所有的实例也会反映出来。所以很少使用这种方式。

(常用)构造函数模式与原型模式组合

构造函数与原型混成的模式,是目前在ECMAScript中使用最广泛、认同度最高的一种创建自定义类型的方法。可以说是定义引用类型的默认模式。

function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.ageName = sayName;
this.friends = ["Shelby","Court"];
}
// prototype 上共享方法
Person.prototype = {
constructor: Persion,
sayName: function(){
alert(this.name)
}
}

动态原型模式

function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.ageName = sayName;
this.friends = ["Shelby","Court"]; if(typeof this.sayName != "function"){
Person.prototype.sayName = function(){
alert(this.name);
}
}
}

寄生构造函数模式

function Person(name, age, job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.ageName = sayName;
o.friends = ["Shelby","Court"]; return o;
} var person = new Person("fd",34,"FE");

稳妥构造函数模式

function Person(name, age, job ){
var o = new Object(); o.sayName = function(){
alert(name)
}
return o;
}
var friend = new Person("t", 23, "fe");
friend.sayName();

【Javascript-基础-Object】创建对象的更多相关文章

  1. JavaScript基础:创建对象

    先来看两种简单的对象创建方式: 1.Object构造函数方法 var person = new Object(); person.name = "Nicholas"; person ...

  2. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  3. JavaScript基础学习(四)—Object

    一.Object的基本操作 1.对象的创建      在JavaScript中,创建对象的方式有两种:构造函数和对象字面量.      (1)构造函数 var person = new Object( ...

  4. JavaScript基础

    JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...

  5. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  6. 前端之JavaScript基础

    前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...

  7. Javascript基础回顾 之(三) 面向对象

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  8. JavaScript 基础回顾——对象

    JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...

  9. javascript基础部分

    javascript基础部分 1  数据类型: 基础数据类型(通过typeof来检测):Number,string,undefined,null,boolean,function typeof只能检测 ...

  10. 第三篇:web之前端之JavaScript基础

    前端之JavaScript基础   前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript ...

随机推荐

  1. edge浏览器无法解析<img>的原因

    使用<img>标签插入图片,使用谷歌,ie,等浏览器测试,都可以正常显示图片,但是edge浏览器就是实现不了.经过排查测试,不是文件格式的问题,而是路径带有中文.相对路径中虽然不带中文,但 ...

  2. RabbitMq、ActiveMq、ZeroMq、kafka各个消息中间件之间的区别

    MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求. 第一部分:RabbitMQ,ActiveMq, ...

  3. 在IE、fixfox、chrome等浏览器中ajax提交成功后,打开新标签页面被浏览器拦截问题[转]

    如题: 在项目中要在当前页面中,再新开一个页面, 新开页面的地址是ajax请求后返回的url --------- 试了,浏览器提示组织弹窗..... 网上找,找到了一个处理方式,思路是 1. 先打开一 ...

  4. Android踩坑随笔Fragment中onActivityResult方法不被调用

    最近项目里要做头像功能,参考了这篇博客(GitHub - zhudfly/SelectAvatarApplication: 一个选择并显示头像圆形控件,可以通过拍照或者选择相册中的图片来设置图片),但 ...

  5. 【分享】BS大神的C++ 11 keynotes

    看到infoQ上面有BS大神的keynotes讲C++ 11的,有点长,但是值得一看.   http://www.infoq.com/presentations/Cplusplus-11-Bjarne ...

  6. 5 TensorFlow实战Google深度学习框架一书中的错误两处(交叉熵定义有误)

    第一处: 书中62页定义的交叉熵函数定义有误,虽然这个所谓交叉熵的数值能够减少,但是是不能提升预测性能的,因为定义就错了. 我已经将预测过程可视化,直接将交叉熵改为我的,或者用原书的,就可以看到预测结 ...

  7. 自动化测试基础篇--Selenium框架设计(POM)

    一.自动化测试框架 感谢木棉花的漂泊分享,内容转自链接:http://www.cnblogs.com/fengyiru6369/p/8053035.html 1.什么是自动化测试框架 简单来说,自动化 ...

  8. 模型层(template)

    错误之forbbiddon csrf_token:这个标签用于跨站请求伪造保护 提交数据的时候就会做安全机制,当你点击提交的时候会出现一个forbbiddon 的错误,就是用setting配置里的sc ...

  9. Azure 登录设置

    转自 http://blog.csdn.net/azure_nonofficial/article/details/38095459 这是我们Azure非官方的第一篇博文,欢迎大家各种拍砖. 微软云计 ...

  10. 错误:该表单无法显示,可能是由于 Microsoft SharePoint Server State Service 配置不当。有关详细信息,请与服务器管理员联系

    问题场景: 1.SharePoint 2013 中工作流需要状态服务(State Service),如果没有正确配置状态服务,则在给列表.文档库添加工作流时会遇到错误: “该表单无法显示,可能是由于 ...