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/>本笔记是为了方便日后查阅,仅作学习交流 ...
随机推荐
- liunx 修改IP地址
1.安装centos系统,这里就不详细说明了. 2.进入到 vi /etc/sysconfig/network-scripts/ifcfg-eth0 后面的名称有些可能不同 其中,有些可能没 ...
- Python3 OpenCV3 图像处理基础
开发环境搭建 本人使用的是Ubuntu 16.04LTS. 1.安装Python3 ## 其实 Ubuntu 16.04 系统自带了 Python 3.5.2,因此不需要再安装了?但是需要安装一些开发 ...
- jxcel - 好用的Excel与Java对象转换工具
更多精彩博文,欢迎访问我的个人博客 Jxcel简介 Jxcel是一个支持Java对象与Excel(目前仅xlsx.xls)互相转换的工具包. 项目地址:https://github.com/jptan ...
- MYSQL数据库攻防与加固
这是“官方”原本的模样搬过来的..写的很粗略啊.还有篇详细的请查看:MySQL安全加固题目及答案参考解析 启动xserver-mysql,进入xserver-mysql,开始实验,实验步骤如下: 1. ...
- 条款31:将文件间的编译依存关系降至最低(Minimize compilation dependencies between files)
NOTE1: 1.支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式.基于此构想的两个手段是Handle classes 和 Interface classes. 2.程序库头文件应 ...
- Python-集合数据类型内置方法
集合内置方法(必考) 用途:用于关系运算的集合体,由于集合内的元素无序且集合元素不可重复,因此集合可以去重,但是去重后的集合会打乱原来元素的顺序. 定义方式:{}内用逗号隔开多个元素,元素只能是不可变 ...
- Leetcode 224.基本计算器
基本计算器 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1 ...
- HUD-1559 最大子矩阵,dp模拟
最大子矩阵 ...
- 校第十六届大学生程序设计竞赛暨2016省赛集训队选拔赛(Problem E)
Problem E Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- bzoj1202:[HNOI2005]狡猾的商人 【并查集】
Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...