第六章 面向对象的程序设计
1、面向对象的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。如python。ES中没有类的概念。
2、ES的对象可以想象成散列表:无非就是一组名值对,其中值可以是数据或函数。每个对象都是基于一个引用类型创建的。
3、ES对象中有两种属性:数据属性和访问器属性。
4、访问器属性不包含数据值,它们包含一对getter和setter函数。
5、使用Object.defineProperties()可以定义多个属性及其特性。
6、使用Object.getOwnPropertyDescriptor()方法可以获得属性的特性,返回是一个对象。只能用于实例属性,要想取得原型属性的描述符,必须直接在原型对象上调用。
7、构造函数和普通函数的唯一区别,在于调用方式不同。任何函数,通过new操作符调用,那么它就可以作为构造函数。
8、调用对象的属性时,进行两步搜索——先搜索实例,如果没有这个属性再搜索原型。这就是多个对象实例共享原型所保存的属性和方法的基本原理。P148
9、当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性,只会阻止我们访问原型中的那个属性,但不会修改原型属性。
10、单独使用时,in操作符会在通过对象能够访问指定属性是返回true,不论是存在于实例中还是原型中。配合hasOwnProperty()方法可以确定该属性到底存在于实例中还是原型中。
1 function hasPrototypeProperty(object,name){2 return !object.hasOwnProperty(name)&&(name in object);3 }
11、使用Object.keys()和Object.getOwnPropertyNames()方法可用来替代for-in循环来取得对象上的实例属性。前着取得的是可枚举属性,后者是所有。
12、实例中的指针只指向原型,不指向构造函数。重写原型时需谨慎。
13、创建自定义类型最常见的方法是组合使用构造函数和原型模式,构造函数用于定义实例属性,原型模式用于定义方法和共享的属性。
14、寄生组合式继承是引用类型最理想的继承范式。P172。