[javascript权威指南][阅读笔记]四

 

第六章  对象

  1. 对象可以看做是属性的无序集合,每个属性都是一个名/值对
  2. 属性名是字符串,所以对象也可以看做是字符串到值的映射
  3. 对象是可变的,我们通过引用而非值来操作对象
  4. 属性名可以是任意字符串
  5. 值可以是任意javascript值,或者是一个getter或setter函数
  6. 属性特性:一些与属性相关的值
  7. 可写:writable attribute 表明是否可以配置该属性的值
  8. 可枚举:enumberable attribute 表明是否可以通过for/in循环返回该属性
  9. 可配置:configurable attribute 表明是否可以删除或修改该属性
  10. 对象特性:每个对象除了包含属性之外,还有三个对象特性
  11. 对象的原型:prototype 指向另外一个对象,本对象的属性继承自它的原型对象
  12. 对象的类:class 是一个标识对象类型的字符串
  13. 对象的扩展标记:extensible flag 指明了是否可以向该对象添加新属性
  14. 三类javascript对象:内置对象(native object),宿主对象(host object),自定义对象(user-define object)
  15. 内置对象:由ECMAScript规范定义的对象或类。如数组、函数、日期、正则
  16. 宿主对象:由javascript解释器所嵌入的宿主环境(如web浏览器)定义的。宿主对象也可以当成内置对象
  17. 自定义对象
  18. 两类属性:自有属性(own property),继承属性(inherited property)
  19. 创建对象的4种方式:对象直接量,通过new创建对象,原型,Object.create()
  20. 通过关键字new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。同使用{}创建对象一样,使用new Object()创建的对象也继承自Object.prototype。
  21. Object.prototype是为数不多的没有原型的对象
  22. Object.create()是一个静态函数,而不是某个对象调用的方法。它创建一个新对象,第一个参数是这个对象的原型。第二个参数可选,用以对对象的属性进行进一步描述
  23. inherit函数的一个用途就是防止库函数无意间(无恶意的)修改那些你不受你控制的对象。不是将对象直接作为参数传入函数,而是将它的继承函数传入函数
  24. 可以使任意对象可继承/可以通过任意原型创建新对象
  25. 点运算符后跟标识符,方括号中的表达式必须返回一个字符串
  26. 关联数组/散列/映射/字典——js对象
  27. 属性赋值操作首先检查原型链,以此判断是否允许赋值操作
  28. 在javascript中,只有查询属性才能体会继承的存在,设置属性和继承无关
  29. 三种给某对象o设置某属性p会失败的场景:
  30. 1、o的属性p是只读的:defineProperty()方法可以对可配置的只读属性进行重新赋值
  31. 2、o中的属性p是继承的,且是只读的:不能通过同名的自有属性覆盖继承属性
  32. 3、o中不存在自有属性p
  33. delete只是断开属性和宿主对象的联系,而不会操作属性中的属性:因此在销毁对象时,要遍历属性中的属性,依次删除,防止内存泄漏
  34. 检测属性:in——可枚举的自有属性和继承属性,hasOwnProperty()——自有属性,propertyIsEnumerable()——可枚举的自有属性
  35. 只有in运算符可以区分:不存在的属性 && 存在但值为undefined的属性
  36. 枚举属性:用来枚举属性的对象工具函数
  37. “存取器属性”(accessor property):相对于数据属性而言,它是由getter和setter方法定义的属性
  38. 当程序查询存储器属性的值时,javascript调用getter方法(无参数),返回属性存取表达式的值
  39. 当程序设置存储器属性的值时,javascript调用setter方法,将赋值表达式右侧的值作为参数传入setter方法,可以忽略setter的返回值
  40. 存取器属性不具有可写性(writable attribute),只有getter方法即为只读,只有setter方法即为只写,读取只写属性返回undefined
  41. 存储器属性定义为一个或两个和属性同名的函数,这个函数定义没有使用function关键字,而是使用get和(或)set。函数的结束和下一个方法或数据属性之间用逗号隔开
  42. 属性的特性:可写/可枚举/可配置
  43. 数据属性的4个特性:值,可写性,可枚举性,可配置性
  44. 存取器属性的4个特性:get,set,可枚举性,可配置性
  45. 属性描述符(property descriptor):这是一个对象
  46. Object.getOwnPropertyDescriptor(obj,property)
  47. Object.defineProperty(obj,property,configuration)
  48. Object.defineProperties(obj,confTable)
  49. 对象的三个属性:原型属性,类属性,可扩展性
  50. 原型属性是对象用来继承属性的。“o的原型属性” 简称为 “o的原型”
  51. 查询对象的原型:Object.getPrototypeOf() /o.constructor.prototype
  52. 检测一个对象是否是另一个对象的原型:isPrototypeOf()
  53. 对象的类属性是一个字符串
  54. 要想获得对象的类,可以调用对象的toString()方法,然后提取已返回字符串的第8个到倒数第2个位置之间的字符串
  55. 可扩展性
  56. 查询可扩展性Object.esExtensible()
  57. 设置为不可扩展Object.preventExtensions(),此行为不可逆,但设置对象的原型的属性,对象仍然会继承新属性
  58. Object.seal()也可以将对象“锁住”,对象的属性都设为不可配置/删除,可写的属性仍然可以设置,可以通过Object.isSealed()来查询是否封闭
  59. Object.freeze()将对象“冻住”,对象不可扩展,属性不可配置,且数据属性均为只读
  60. 序列化对象:将对象的状态转换为字符串,也可以将字符串还原为对象
  61. JSON.stringify()和JSON.parse()用来序列化和还原javascript对象
  62. NaN,Infinity,-Infinity序列化的结果是null
  63. 日期对象序列化的结果是ISO格式的日期字符串,但JSON.parse()仍保留其字符串状态,而不会还原为日期对象
  64. 函数、RegExp、Error对象和undefined值不能序列化和还原
  65. JSON.stringify()只能序列化对象可枚举的自有属性
  66. 对象方法:toString(),toLocalString(),toJSON(),valueOf()
  67. toString()没有参数,返回一个表示调用这个方法的对象值的字符串,包含信息量很少
  68. 很多类都带有自定义的toString(),如数组返回一个数组元素列表,每个元素都转成了字符串;函数返回源代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值