JavaScript高级程序设计(第三版) 6/25
第六章
面向对象的程序设计
1.定义只有在内部才用的特性(attribute)时,描述了属性(property)的各种特征。这些特性是为了实现JavaScript引擎用的,因此在JavaScript中不能直接访问它们。为了表示特性是内部值,该规范把它们放在了两对方括号中,例如[[Enumerable]]。
2.数据属性
[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,默认为true,一旦改为false不能再把它变回可配置了。
[[Enumerable]]:表示能否通过for-in循环返回属性,默认为true。
[[Writable]]:表示能否修改属性的值,默认为true。
[[Value]]:包含这个属性的数据值,默认为undefined,只可读。
3.要修改属性默认的特性,必须使用ES5的Object.definePropert()方法。这个方法接受三个参数:属性所在的对象,属性的名字和一个描述符对象。
4.访问器属性
[[Configurable]]
[[Enumerable]]
[[Get]]:在读取属性时调用的函数。默认undefined
[[Set]]:在写入属性时调用的函数。默认undefind
访问器属性不能直接调用,必须使用Object.defineProperty()
_year,起那么加下划线是一种常用的标记,用于表示只能通过对象方法访问的属性。
5.工厂模式
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("Nicholas",29,"Software Engineer");
var person = createPerson("Grey",27,"Doctor");
6.构造函数模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
var person1 = new Person("Nicholas",29,"Software Engineer"); var person2 = new Person("Nicholas",29,"Software Engineer");
跟工厂模式的区别:1.没有显示地创建对象 2.直接将属性和方法赋给了this对象 3.没有return语句
7.创建一个实例经过的步骤
1.创建一个新对象
2.将构造函数的作用域赋给新对象(因此this就指向了这个新对象)
3.执行构造函数中的代码(为这个新对象添加属性)
4.返回新对象
8.person1根person2保存着不同的实例,但是两个对象都有一个constructor(构造函数)属性,指向Person
person1 instanceof Person == true
创建自定义构造函数意味着将来可以将它的实例标识为一种特定的类型,而这正是构造函数模式胜于工厂模式的地方
9.创建的每一个函数都有一个prototype(原型)属性。
使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法。换句话说,不必再构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中。
10.代码读取属性时候,如果在实例中找到了具有给定名字的属性,则返回该属性的值,如果没有找到,则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性。
11.
function Person(){
}
var friend = new Person();
Person.prototype = {
constructor:Person,
name: "Nicholas",
age : 29,
job : "Student"
sayName : function(){
alert(this.name);
}
};
friend.sayName();
重写原型对象切断了现有原型与任何之前已经存在的对象之间的联系;它们的引用任然是最初的原型。
搞错 不应该报这个错误,原因是我在上面的job的后面少了个,所以导致出现这个错误,是语法错误的意思
改完后
12.不建议修改原生对象的原型,因为不同分支如果都重写,可能造成命名冲突。
13.原型对象的最大问题是其共享的本性所导致。
14.组合使用构造函数模式和原型模式,每一个实例都会有自己的一份实例属性的副本,但同时又共享着对方的引用了,最大限度地节省了内存。另外,这种混成模式还支持向构造函数传递参数。
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.friends = ["shelby","court"];
}
Person.prototype = {
constructor : Person,
sayName : function(){
alert(this.name);
}
}
var person1 = new Person("zs", 12, "student");
var person2 = new Person("ls", 11, "doc");
person1.friends.push("van");
alert(person1.friends);//shelby,count,van
alert(person2.friends);//shelby,count
alert(person1.friends === person2.friends);//false
alert(person1.sayName === person2.sayName);//true
15.and 寄生构造函数模式,稳妥构造函数模式。instanceof操作符对这种对象都没意义。
16.javascript的继承主要依靠原型链来实现,
比如,1,先搜索实例 2,往上层原型搜索 3,往更上层原型搜索
17.原型链的问题也是原型属性实例共享。解决这个问题用借用构造函数。(这两种技术都很少单独使用)
18.组合继承
function SuperType(name){
this.name = name;
this.colors = ["red","blue","green"]
}
SuperType.prototype.sayName = function(){
alert(this.name);
}
function SubType(name, age){
// 继承属性
SuperType.call(this,name);
this.age = age;
}
// 继承方法
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function(){
alert(this.age);
}; var instance1 = new SubType("Nicholas",29);
instance1.colors.push("black");
alert(instance1.colors); // "red,blue,green,black"
instance1.sayName(); // "Nicholas"
instance1.sayAge(); // var instance2 = new SubType("Grey",27);
alert(instance2.colors); // "red,blue,green,black"
instance2.sayName(); // "Grey"
instance2.sayAge(); //
组合继承避免了原型链和借用构造函数的缺陷,融合了它们的优点,成为js中最常用的继承模式。而且instanceof 和isPrototypeof()也能够用于识别基于组合继承创建的对象。
JavaScript高级程序设计(第三版) 6/25的更多相关文章
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- javascript高级程序设计第三版书摘
在HTML 中使用JavaScript <script>元素 在使用<script>元素嵌入 JavaScript 代码时,只须为<script>指定 type 属 ...
- 22.1 高级函数【JavaScript高级程序设计第三版】
函数是JavaScript 中最有趣的部分之一.它们本质上是十分简单和过程化的,但也可以是非常复杂和动态的.一些额外的功能可以通过使用闭包来实现.此外,由于所有的函数都是对象,所以使用函数指针非常简单 ...
- DOM 操作技术【JavaScript高级程序设计第三版】
很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...
- 21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】
IE5 是第一款引入XHR 对象的浏览器.在IE5 中,XHR 对象是通过MSXML 库中的一个ActiveX对象实现的.因此,在IE 中可能会遇到三种不同版本的XHR 对象,即MSXML2.XMLH ...
- JavaScript高级程序设计第三版-读书笔记(1-3章)
这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript 提供核心语言功能 DOM 提供访问 ...
- 14.5 富文本编辑【JavaScript高级程序设计第三版】
富文本编辑,又称为WYSIWYG(What You See Is What You Get,所见即所得).在网页中编辑富文本内容,是人们对Web 应用程序最大的期待之一.虽然也没有规范,但在IE 最早 ...
- JavaScript高级程序设计第三版学习笔记(一)之数据类型区分详谈
null.NaN.undefined三者的区别是什么? 在初次接触到JavaScript的时候,傻傻的分不清null.NaN.undefined三者到底区别何在,在实际的项目开发中也因为这个问题而困惑 ...
- 4.2 执行环境及作用域【JavaScript高级程序设计第三版】
执行环境(execution context,为简单起见,有时也称为“环境”)是JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环 ...
- 13.4.3 鼠标与滚轮事件【JavaScript高级程序设计第三版】
鼠标事件是Web 开发中最常用的一类事件,毕竟鼠标还是最主要的定位设备.DOM3 级事件中定义了9 个鼠标事件,简介如下. click:在用户单击主鼠标按钮(一般是左边的按钮)或者按下回车键时触发.这 ...
随机推荐
- excel把按行合并的单元格重新拆分
前言 今天帮朋友弄她excel表格的数据,发现excel表格合并之后,再拆分就不再同一行里面了,导致后面想要拆分回来非常头痛,如下图(下面的数据是模拟的): 可以看到第一例和其他例中间部分为合并的,此 ...
- 最小的K个数(剑指offer-29)
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题目解析 大小为 K 的最小堆 复杂度:O(NlogK) + O(K ...
- 文件的f.seek和文件修改方式以及函数的基本使用
1.文件f.seek的应用 import time with open('access.log', mode='rb') as f: # 1.将指针跳到文件末尾 # f.read() # 错误 f.s ...
- mybitis下choose..when. otherwise条件不起作用
我的代码如下: <select id="findList" resultType="TyArticle"> SELECT <include r ...
- C++ 字符串中子串个数
子串可重叠情况: int fun1(const std::string& str, const std::string& sub){ int num = 0; for (size_t ...
- 成熟度模型:企业规模化推广敏捷和DevOps利器
摘要: 本文介绍了成熟度模型在软件开发行业的应用,重点阐述了成熟度模型对于敏捷和DevOps在企业中进行规模化推广的价值,探讨了成熟度模型的设计原则,并对于如何明智使用成熟度模型给出了建议. 导言 在 ...
- CTF_show平台 web题解 part1
web3 题目描述: 方法一:RFI 使用url实现php远程文件包含 在服务器上构造1.txt <?php $a = "<?php eval(\$_POST['123'])?& ...
- jquery 选项卡切换、选项卡封装、简单的jquery选项卡封装、tab切换效果
相信选项卡切换是大家常用的效果单独写一个选项卡切换很方便但是要是一个页面出现多个选项卡不做封装的话会显得代码很杂乱 <div class="bodyCenter"> & ...
- TIBCO Jasper Report 中显示图片的方式
最近在做的项目中,需要输出很多报表类文档,于是选择用jasper来帮助完成. 使用jasper studio的版本是 :TIB_js-studiocomm_6.12.2_windows_x86_64. ...
- 小书MybatisPlus第4篇-表格分页与下拉分页查询
本文为mybatis系列文档的第4篇,前三篇请访问下面的网址. 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小 ...