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/>本笔记是为了方便日后查阅,仅作学习交流 ...
随机推荐
- js运行机制(线程)
浏览器线程 js运作在浏览器中,是单线程的,即js代码始终在一个线程上执行,这个线程称为js引擎线程. 浏览器是多线程的,除了js引擎线程,它还有: UI渲染线程 浏览器事件触发线程 http请求线 ...
- CAD交互绘制多段线(网页版)
多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下 ...
- Spring JDBC 例子
http://www.yiibai.com/spring/spring_jdbc_example.html 要了解有关Spring JDBC框架与JdbcTemplate类的概念,让我们写这将实现所有 ...
- 普通用户切换到root用户
普通用户切换到root用户首先按组合键 CTRL+ALT+T 进入终端界面,一般终端界面默认为普通用户权限模式,如何从普通用户进入root用户首先重置root密码输入 sudo passwd root ...
- 【分享】 封装js操作textarea 方法集合(兼容很好)。
请使用下面的btn操作. 虽然你现在看来没什么用,当要用的时候又到处找资料,还不如现在收集一下. 在DOM里面操作textarea里面的字符,是比较麻烦的. 于是我有这个封装分享给大家 ...
- 23. STATISTICS
23. STATISTICS STATISTICS表提供有关表索引的信息. STATISTICS表有以下列: TABLE_CATALOG:包含索引的表所属的目录的名称.该值始终为def. TABLE_ ...
- 导出csv文件(php实现)
<?php namespace App\Library\lib; class CsvLib { /** * [构造函数] * */ public function __construct() { ...
- ASP.NET MVC______VS2012
1,在VS2010中,选中指定的代码段,可以拖拽到工具箱中,形成标签,以后还想书写类似的代码,双击鼠标即可. 2,在VS2012中,可以在注释上标注//TODO:我是注释 这样,注释就会出现在任务列表 ...
- PyMySQL操作mysql数据库(py3必学)
一,安装PyMySQL Python是编程语言,MySQL是数据库,它们是两种不同的技术:要想使Python操作MySQL数据库需要使用驱动.这里选用PyMySQL驱动. 安装方式还是使用pip命令. ...
- Vmware改成bridge方式联网
1.在使用桥接之前,先在真机的'更改适配器设置中'禁用vmnet1和vmnet8 2.在VMware中定义一个桥接器 3.设置这个Linux虚拟机使用前一个步骤定义的桥接器--进入桥接器选择界面 4. ...