1.工厂模式

这样的模式抽象创建详细对象的过程。用函数封装特定的接口来创建类。

function createStudent(name) {
var o = new Object();
o.name = name;
o.sayName = function() {
alert(this.name);
};
return o;
}
var student1 = createStudent("Tom");
解决的问题:攻克了创建多个类似对象的问题
缺点:没有解决对象识别问题

2.构造函数模式

    function Student(name) {
this.name = name;
this.sayName = function() {
alert(this.name);
};
}
var student1 = new Student("Tom");
var student2 = new Student("Suen");

这样的模式创建Student的新实例,必须使用new操作符。调用构造函数会经过例如以下4步骤:(1)创建一个新对象; (2)将构造函数的作用域赋给新对象(因此this就指向了这个新对象); (3)运行构造函数中的代码(为这个新对象加入属性) (4)返回新对象

解决的问题:对象识别问题,能够通过constructor属性和instanceof操作符来检測对象类型:

        alert(student1.constructor == Student) //true
alert(student2 instanceof Object) //true
alert(student2 instanceof Student) //true

缺点:每一个方法都要在每一个实例上又一次创建一遍。比方上面的样例,student1和student2的sayName()不是同一个Function的实例,这是不必要的。

3.原型模式

我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象。这个对象的用途就是包括全部实例共享的属性和方法。

    function  Student() {
}
Student.prototype.name = "Tom";
Student.prototype.sayName = function(){
alert(this.name);
};
var student1 = new Student("Tom");
var student2 = new Student("Suen");
alert(student1.sayName == student2.sayName); //true

    更简单的原型语法:
function Student(){
}
Student.prototype = {
constructor : Student,
name : "Tom",
sayName : function() {
alert(this.name);
}
};

解决的问题:全部对象实例共享原型中方法,不须要又一次创建。

缺点:它省略了为构造函数初始化參数环节。导致全部实例在默认情况下都取得同样的属性值。

更严重的是原型中的属性被非常多实例共享。尽管能够通过实例中加入同名属性解决,可是对于包括引用类型值的属性来说,问题就比較突出。

4.组合使用构造函数模式和原型模式

构造函数模式用于定义实例属性。而原型模式定义方法和共享的方法。

每一个实例都会有自己的一份实例属性的副本。同一时候又共享着对方法的引用。

    function Student(name) {
this.name = name;
this.roommates = ["John","Ben"];
}
Student.prototype = {
constructor : Student,
sayName : function() {
alert(this.name);
}
}; var student1 = new Student("Tom");
var student2 = new Student("Suen"); student1.roommates.push("Jim");
alert(student1.roommates); // "John, Ben, Jim"
alert(student2.roommates); // "John, Ben"

这样的模式是使用最广泛,认可度最高的模式。

javascript创建对象总结(javascript高级程序设计)的更多相关文章

  1. 《JAVASCRIPT高级程序设计》创建对象的七种模式

    细看javascript创建对象模式的诞生,具体的脉络为:不使用任何模式——工厂模式——构造函数模式——原型模式——组合使用构造函数模式——动态原型模式——寄生构造函数模式——稳妥构造函数模式.每一种 ...

  2. 读javascript高级程序设计00-目录

    javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...

  3. 《JavaScript高级程序设计》学习笔记(5)——面向对象编程

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object ...

  4. 《JavaScript高级程序设计》学习笔记(4)——引用类型

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第五章内容. 在ECMAScript中, ...

  5. javascript 高级程序设计 十二

    1.组合使用原型模式和构造函数模式: 由于原型模式创建对象也有它的局限性------有智慧的人就把原型模式和构造函数模式进行了组合. function Person(name, age, job){/ ...

  6. 《JavaScript高级程序设计》学习笔记

    系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...

  7. JavaScript高级程序设计(第三版)学习笔记20、21、23章

    第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...

  8. 《Javascript高级程序设计》读书笔记之对象创建

    <javascript高级程序设计>读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘 创建对象 工厂模式 工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题 缺点:没有解决 ...

  9. 读javascript高级程序设计-目录

    javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...

随机推荐

  1. JDO

    JDO 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象 ...

  2. swfit:运算符重载 Operator Methods

    Operator Methods Classes and structures can provide their own implementations of existing operators. ...

  3. fgetpos, fseek, fsetpos, ftell, rewind - 重定位某个流

    总览 (SYNOPSIS) #include <stdio.h> int fseek(FILE *stream, long offset, int whence); long ftell( ...

  4. C-基础:memcpy、memset、memmove、memcmp、memchr

    一,原型 void * memcpy ( void * destination, const void * source, size_t num ); 功能:将以source作为起始地址的数据复制nu ...

  5. ICPC-Beijing 2006 狼抓兔子

    题目描述 题解: 裸的最小割. 但是最大流跑不过去怎么办? 转变一下,既然最大流是一条左下<->右上的通路,我们可以把图划分为若干区域, 最后找左下到右上的最短路就行了. 代码: #inc ...

  6. [LUOGU] P2187 小Z的笔记

    看范围猜方程,应该是O(n)级别的 f[i]表示前i个合法的最小代价,转移需要枚举断点位置,O(n^2) f[i]表示前i个合法留下的最大个数,同时更新距离最近的26个字母的位置,O(n)转移 f[i ...

  7. MYSQL数据库攻防与加固

    这是“官方”原本的模样搬过来的..写的很粗略啊.还有篇详细的请查看:MySQL安全加固题目及答案参考解析 启动xserver-mysql,进入xserver-mysql,开始实验,实验步骤如下: 1. ...

  8. 常见的linux命令及其翻译

    常见的linux指令 1.ls ll 查看文件信息 2.cd 切换工作目录 cd 或 cd ~ 切换到/home/用户目录 cd. 切换到当前目录 cd.. 切换到上级目录 cd- 切换入上次所在的目 ...

  9. 二手GTX650

    某鱼入手一二手华硕显卡GTX650 店主信誉挺高的,到手图片 我K,被骗了翻新的假显卡,华硕没有过这个样式的GTX650啊,还是新的散热风扇及前挡板,不管了先把风扇拆了,竟然连风扇散热硅脂都是刚刚涂上 ...

  10. Linux文件查找find和locate

    目 录 第1章 locate文件查找    1 1.1 概述    1 1.2 locate文件查找的特性    1 第2章 文件查找概述    1 第3章    1 3.1 文件名查找    1 3 ...