javascript创建对象总结(javascript高级程序设计)
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高级程序设计)的更多相关文章
- 《JAVASCRIPT高级程序设计》创建对象的七种模式
细看javascript创建对象模式的诞生,具体的脉络为:不使用任何模式——工厂模式——构造函数模式——原型模式——组合使用构造函数模式——动态原型模式——寄生构造函数模式——稳妥构造函数模式.每一种 ...
- 读javascript高级程序设计00-目录
javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...
- 《JavaScript高级程序设计》学习笔记(5)——面向对象编程
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object ...
- 《JavaScript高级程序设计》学习笔记(4)——引用类型
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第五章内容. 在ECMAScript中, ...
- javascript 高级程序设计 十二
1.组合使用原型模式和构造函数模式: 由于原型模式创建对象也有它的局限性------有智慧的人就把原型模式和构造函数模式进行了组合. function Person(name, age, job){/ ...
- 《JavaScript高级程序设计》学习笔记
系统学习JS, 从<JavaScript高级程序设计>入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...
- JavaScript高级程序设计(第三版)学习笔记20、21、23章
第20章,JSON JSON(JavaScript Object Notation,JavaScript对象表示法),是JavaScript的一个严格的子集. JSON可表示一下三种类型值: 简单值: ...
- 《Javascript高级程序设计》读书笔记之对象创建
<javascript高级程序设计>读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘 创建对象 工厂模式 工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题 缺点:没有解决 ...
- 读javascript高级程序设计-目录
javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...
随机推荐
- JDO
JDO 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象 ...
- swfit:运算符重载 Operator Methods
Operator Methods Classes and structures can provide their own implementations of existing operators. ...
- fgetpos, fseek, fsetpos, ftell, rewind - 重定位某个流
总览 (SYNOPSIS) #include <stdio.h> int fseek(FILE *stream, long offset, int whence); long ftell( ...
- C-基础:memcpy、memset、memmove、memcmp、memchr
一,原型 void * memcpy ( void * destination, const void * source, size_t num ); 功能:将以source作为起始地址的数据复制nu ...
- ICPC-Beijing 2006 狼抓兔子
题目描述 题解: 裸的最小割. 但是最大流跑不过去怎么办? 转变一下,既然最大流是一条左下<->右上的通路,我们可以把图划分为若干区域, 最后找左下到右上的最短路就行了. 代码: #inc ...
- [LUOGU] P2187 小Z的笔记
看范围猜方程,应该是O(n)级别的 f[i]表示前i个合法的最小代价,转移需要枚举断点位置,O(n^2) f[i]表示前i个合法留下的最大个数,同时更新距离最近的26个字母的位置,O(n)转移 f[i ...
- MYSQL数据库攻防与加固
这是“官方”原本的模样搬过来的..写的很粗略啊.还有篇详细的请查看:MySQL安全加固题目及答案参考解析 启动xserver-mysql,进入xserver-mysql,开始实验,实验步骤如下: 1. ...
- 常见的linux命令及其翻译
常见的linux指令 1.ls ll 查看文件信息 2.cd 切换工作目录 cd 或 cd ~ 切换到/home/用户目录 cd. 切换到当前目录 cd.. 切换到上级目录 cd- 切换入上次所在的目 ...
- 二手GTX650
某鱼入手一二手华硕显卡GTX650 店主信誉挺高的,到手图片 我K,被骗了翻新的假显卡,华硕没有过这个样式的GTX650啊,还是新的散热风扇及前挡板,不管了先把风扇拆了,竟然连风扇散热硅脂都是刚刚涂上 ...
- Linux文件查找find和locate
目 录 第1章 locate文件查找 1 1.1 概述 1 1.2 locate文件查找的特性 1 第2章 文件查找概述 1 第3章 1 3.1 文件名查找 1 3 ...