js-权威指南学习笔记5

第六章 对象

1、对象的方法通常是继承的属性。这种原型式继承是JS的核心特征。

2、除了名字和值之外,每个属性还有一些与之相关的值,称为属性特性——可写/可枚举/可配置数据属性的四个特性——值、可写性、可枚举性、可配置性存取器四个特性——读取、写入、可枚举性、可配置性

3、除了包含属性之外,每个对象还拥有三个相关的对象特性(对象的三个属性)——对象的原型/对象的类/对象的扩展标记

4、可以通过对象直接量/关键字new和(ES5的)Object.create()函数创建对象

5、如果在一个重复调用的函数中的循环体内使用了对象直接量,它将创建很多新对象,并且每次创建的对象的属性值也有可能不同。

6、没有原型的对象为数不多,Object.prototype是其中之一,它不继承任何属性。

7、Object.create()函数可以通过传入参数null来创建一个没有原型的新对象,但通过这种方式创建的对象不会继承任何东西,甚至不包括基础方法。如果想创建一个普通的空对象,需要传入Object.prototype

8、对象查询时使用方括号和一个字符串,看起来像是数组,这种数组就是我们所说的关联数组,也称为散列/映射/字典JS对象都是关联数组

9、对象查询使用方括号的方式时,方括号内字符串时动态的,可以在运行时更改。使用.和标识符的方式时,标识符是静态的,必须写死在程序里。

10、不能通过同名自有属性覆盖只读继承属性

11、delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性。要确保销毁对象,要遍历属性中的属性,依次删除。delete运算符只能删除自有属性,不能删除继承属性。

12、检测属性:可以通过in操作符hasOwnProperty()propertyIsEnumerable()方法来完成这个工作,甚至仅通过属性查询也可以。

13、in操作符在对象的自有属性或继承属性中包含这个属性则返回true。对象的hasOwnProperty()方法用来检测给定的名字是否是对象的自有属性,对于继承属性它将返回false。结合使用可以检测某属性是否是继承属性。

14、propertyIsEnumerable()是hasOwnProperty()的增强版,只有检测到是自有属性且这个属性可枚举时返回true。

15、枚举属性for/in循环、ES5的Object.keys()函数(可枚举的自有属性)和Object.getOwnPropertyNames()(返回所有自有属性,不仅是可枚举的)。

16、属性值可以用一个或两个方法替代,这两个方法就是getter和setter。由getter和setter定义的属性称作存取器属性

17、通过调用Object.getOwnPropertyDescriptor()可以获得某个对象特定属性的属性描述符(属性描述符对象)。要想设置属性的特性,或者让新建属性具有某种特性,需要调用Object.defineProperty(),传入要修改的对象、要创建或修改的属性的名称以及属性描述符对象。

18、要想检测一个对象是否是另一个对象的原型或处于原型链中,使用isPrototypeOf()方法。类似于instanceof运算符。

19、要想获得对象的类,可以调用对象的toString()方法,然后提取字符串的第8个到倒数第二个位置之间的字符。Object.prototype.toString.call(o).slice(8,-1);

20、ES5提供了内置函数JSON.stringify()和JSON.parse()用来序列化和还原JS对象。

21、对象的可扩展性:Object.preventExtensions()不可添加,但已有的可删可改。Object.seal()不可添加删除,已有的可改。Object.freeze()不可添加删除更改(存取器属性不受影响)。

posted @ 2017-01-10 10:44  ZhangCui  阅读(174)  评论(0编辑  收藏  举报