原型链的内部执行方式
属性的重写与删除与原型链无关
获取原型对象的三种方法
通过constructor判定数据类型
constructor属性并不是对象的直接属性,而是通过原型链接 查找到的
每个对象在创建时 构造器会执行这样一句代码this.prototype= { constructor:this, __proto__:Object.prototype }通过改变prototype实现继承数据类型判定(instanceof与isPrototypeOf)
属性的枚举
in 可以可判断本身属性和通过继承来的属性 是否存在于某个对象hasOwnProperty只列出本身可以枚举的属性有些属性被枚举出来是因为enumerable属性为falsegetOwnPropertyNames可以无视枚举属性,列举出所有属性
ECMAScript里的Object类
Object里的create方法,是除了对象字面量与new表达式之外的第三种官方的生成对象的方法第一个参数需要一个原型对象,第二个参数需要一个属性对象。如果将一个null作为原型传递给create方法 ,则会生成一个没有进行原型继承的对象属性对象
create方法的第二个参数是一个关联数组,其键为属性名,其值为属性描述符(属性对象)属性描述符指由下表中的 由属性组成的关联数组属性对象
create方法的第二个参数是一个关联数组,其键为属性名,其值为属性描述符(属性对象)属性描述符指由下表中的 由属性组成的关联数组 属性的属性名 | 含义 |
writable | 可以改写属性的值 |
enumerable | 可以通过for in枚举出 |
configurable | 可以改变属性的属性,可以删除属性 |
get | 可以指定属性值的getter函数 |
set | 可以指定属性值的setter函数 |
属性值通过value属性指定.大部分属性的默认值是false,也可以显示地指定为true
与Object类的属性的属性有关的方法
方法 | 说明 |
defineProperty(o,p,attributes) | 向对象o增加/更新具有特定信息的属性p |
defineProperties(o,properties) | 向对象o增加/更新具有特定信息的属性 |
getOwnPropertyDescriptior(o,p) | 返回对象o的直接属性p的信息(值与属性) |
如果属性的configurable属性为true,可以更改包括值在内的所有属性,反之如果为false,则不能
由于此时configurable的属性页无法更改,这是其实是无法进行任何更改的.