@Wennier
2017-04-10T13:37:46.000000Z
字数 706
阅读 155
原型(prototype)属性
原型属性
- 在函数定义时被创建的属性中包括有prototype 属性,它的初值是一个“空”对象。
自身属性与原型属性
- 当我们访问某个对象的某个属性时,JavaScript引擎会遍历该对象的所有属性,若找到了就会立即返回其值。若找不到,脚本引擎就会查询用于创建当前对象的构造器函数的原型
- 每个对象都有一个构造器,而原型本身也是一个对象,这就说明原型也有一个对应的构造器,而这个构造器又会有自己的原型,于是这种结构可能会抑制不断的持续下去,并最终取决于原型链的长度,但最后一环肯定是Object内建对象,因为它是最高级的父级对象。
利用自身属性重写原型属性
- 当对象的原型属性与自身属性重名时,自身属性的优先级高于原型属性
- 利用hasOwnProperty()方法来判断一个属性是自身属性还是原型属性,自身属性返回为true,原型属性返回为false
枚举属性
- for更适合数组,for-in更适合对象
- 并不是所有的属性都会在for-in循环中显示,例如数组的length属性和constructor属性就不会被显示出来,可以被显示的都是可枚举的。通过对象所提供的** propertyIsEnumerable()**方法来判断对象的某个属性是否可枚举
- 原型链中的各个原型属性也会被显示出来,前提是它们是可枚举的
- 对于所有的原型属性,propertyIsEnumerable()都会返回false,包括在for-in循环中可枚举的属性。
- ** propertyIsEnumerable()**该方法对所有的非内建对象属性返回true,而对于内建对象属性和方法来说,大部分都是不可枚举的;任何来自原型链中的属性也是不可枚举的