《Javascript高级程序设计》读书笔记之对象创建
《javascript高级程序设计》读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘
创建对象
工厂模式
工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题
缺点:没有解决对象识别问题,所有对象都仅是Object的实例
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; } var person1=createPerson("Jack",29,"Engineer");//检测对象类型 alert(person1 instanceof Object) //true alert(person1 instanceof Person) //error Person is not defined
View Code
构造函数模式
构造函数模式相比工厂模式的优点就在于,构造函数模式可以将他的实例标示为特定类型
function Person(name,age,job) {this.name=name;this.age=age;this.job=job;this.sayName=function(){alert(this.name);}; } var person1=new Person("Jack",29,"Engineer");//检测对象类型 alert(person1 instanceof Object) //true alert(person1 instanceof Person) //true
View Code
构造函数也是函数,如果不通过new 操作符调用,和其他函数没有不同
function Person(name,age,job) {this.name=name;this.age=age;this.job=job;this.sayName=function(){alert(this.name);}; } //以构造函数模式调用 var person1=new Person("Jack",29,"Engineer"); person1.sayName();//Jack//以普通函数调用 Person("Lily",25,"Actor");//执行环境为全局执行环节,this指向window window.sayName();//Lily//在另一个对象的作用域中调用 var o=new Object(); Person.apply(o,["Jim",21,"Teacher"]);//扩展Person至实例对象o的作用域 o.sayName();//Jim
View Code
构造函数模式缺点在于实例方法无法复用,创建两个对象person1,person2的sayName方法的不等的,解决方法可以将函数定义转至构造函数外部,构造函数这用函数指针作为对象属性,指向外部的函数定义。
但是这样的实现,首先污染了全局作用域,其次破坏了封装性
function Person(name,age,job) {this.name=name;this.age=age;this.job=job;this.sayName=sayName; } function sayName(){alert(this.Name); } var person1=new Person("Karl",28,"Doctor");
View Code
原型模式
每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象用途是包含可以由特定类型的所有实例共享的属性和方法
function Person() { } Person.prototype.name="Jim"; Person.prototype.age=29; Person.prototype.job="Teacher"; Person.prototype.sayName=function(){alert(this.Name); }; var person1=new Person(); person1.sayName();//"Jim" var person2=new Person(); alert(person1.sayName==person2.sayName);//true
View Code
代码这构造函数、原型对象和实例对象之间关系如下图
原型模式简易写法
function Person() { } Person.prototype={constructor:Person,//对象字面量创建了新对象,如不指定,constructor指向了Objectname:"Jim",age:29,job:"Teacher",sayName:function(){alert(this.name);} };
View Code
原型模式的缺点:所有实例在默认情况下取得相同属性值
构造器与原型混合模式
function Person(name,age,job) { this.name=name;this.age=age;this.job=job;this.friends=["Tom","Jack"]; } Person.prototype={constructor:Person,//对象字面量创建了新对象,如不指定,constructor指向了ObjectsayName:function(){alert(this.name);} };var person1=new Person("Jim",25,"Teacher"); var person2=new Person("Lily",20,"Actor"); person1.friends.push("Mark"); alert(person1.friends===person2.friends);//false alert(person1.sayName===person2.sayName);//true
View Code
动态原型模式
个人认为这一模式最优雅,所有代码封装在构造函数,首次调用将方法添加至原型对象
function Person(name,age,job) { this.name=name;this.age=age;this.job=job;this.friends=["Tom","Jack"];//方法if(typeof this.sayName != "function"){Person.prototype.sayName=function(){alert(this.name);};} }
View Code
转载于:https://www.cnblogs.com/GongQi/p/4026198.html
《Javascript高级程序设计》读书笔记之对象创建相关推荐
- javascript高级程序设计读书笔记2
<!DOCTYPE HTML>//这个网页的文档类型,这个是html5的写法 Bootstrap使用的某些HTML元素和CSS属性需要文档类型为HTML5 doctype.因此这一文档类型 ...
- JavaScript高级程序设计读书笔记(第8章BOM之location对象查询字符串参数)
为什么80%的码农都做不了架构师?>>> location对象查询字符串参数 //location.search返回从问号到URL末尾的所有内容function getQuerySt ...
- JavaScript高级程序设计-读书笔记(6)
第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l 简单值:使用与JavaScript相同的语法,可以在JS ...
- javascript高级程序设计读书笔记----引用类型
Array类型. ECMAScript数组的每一项可以保存任何类型的数据. 数组大小是可以动态调整的. 创建数组第一种基本方式方式: 使用Array构造函数 var colors = new Arra ...
- JavaScript高级程序设计读书笔记(一)
第一章 总结: JavaScript是一种专为与网页交互设计的脚本语言. 由三个不同的部分组成: ECMAScript, 由ECMA-262定义,提供核心语言功能: DOM(文件对象模型),提供访问和 ...
- JavaScript高级程序设计读书笔记(第6章面向对象的程序设计之创建对象)
2019独角兽企业重金招聘Python工程师标准>>> 面向对象语言都有"类"的概念,而通过类可以创建任意多个具有相同属性和方法的对象. JS中没有"类 ...
- Javascript高级程序设计--读书笔记--第八章BOM
BOM(browser object model 浏览器对象模型) BOM的核心对象是window,它表示浏览器的一个实例.在浏览器钟,window对象有双重角色,它既是通过javascript 访问 ...
- JavaScript高级程序设计读书笔记(第5章引用类型之Array类型)
为什么80%的码农都做不了架构师?>>> 1.数组长度 //lenth会自动更新 var arr=["black","red","g ...
- javascript高级程序设计读书笔记1
浮点数虽然精度很高,但在实际计算中的精度可能不如整数.比如0.1+0.2并不等于0.3,而是0.3000000000000004,所以把浮点数的计算结果当做判断条件会产生失误,这是基于IEEE754数 ...
- 《javascript高级程序设计》笔记:变量对象与预解析
上一篇:<javascript高级程序设计>笔记:内存与执行环境 上篇文章中说到: (1)当执行流进入函数时,对应的执行环境就会生成 (2)执行环境创建时会生成变量对象,确定作用域链,确定 ...
最新文章
- hadoop2.2.0 集群安装配置
- 关于字符串属性的几道面试题目
- 【数值分析】微分求积:复化梯形、复化辛浦生
- LeetCode 809. 情感丰富的文字
- deprecated conversion from string constant to ‘char*’
- 习题:输出九九乘法表
- bzoj5248(洛谷4363)(2018九省联考)一双木棋
- 【codevs1295】N皇后问题
- HTML5微数据学习笔记
- Matlab R2017a启动时初始化过程时间太长解决办法
- 快速了解Mybatis Plus 的用法以及使用举例
- 快速学习Grasshopper的方法
- 圆方树总结 [uoj30]Tourists
- 路由器指定dns解析服务器设置
- Java 面向对象(一)
- caffe 中的损失函数分析
- python配置opencv最简单_Python版本OpenCV安装配置及简单实例
- 敏捷观点和态度-《敏捷项目管理》读后感
- GRASPIT安装流程
- 开发笔记之数字证书(一):数字证书介绍
热门文章
- 机器人编程语言python-个人微信接入图灵机器人(基于Python)
- python爬虫入门代码-如何开始写你的第一个爬虫脚本——简单爬虫入门!
- python画直方图成绩分析-python plotly绘制直方图实例详解
- python中的装饰器有哪些-python 装饰器以及开发中常用的例子
- 用python画玫瑰花代码-Python | 用turtle库画玫瑰花
- python雷达图-Python成绩单雷达图
- python软件界面-用Html来写Python桌面软件的UI界面-htmlPy
- python基础教程书籍推荐-python入门书籍推荐
- 学python可以做什么职业好-业余学Python能做什么?对职业发展有什么帮助?
- python if语句多个条件-Python 条件语句(if..elif..else)