Object 对象
原型及原型链
原型是一个对象,原型链是一串原型
对象属性
对象的属性可分为:
-
自有属性/继承属性
-
可枚举属性/不可枚举属性
检查属性的方法
-
for/in 循环出自有属性和继承属性
-
hasOwnPreperty()/Object.getOwnPrepertyNames()
-
hasOwnPreperty()
:检测属性是否是对象的自有属性,是返回true,否返回false -
Object.getOwnPrepertyNames()
:返回对象自有属性名 组成的数组
- prepertyIsEnumerable()/Object.keys()
-
prepertyIsEnumerable()
:属性是自有属性且是可枚举的属性,返回true; -
` Object.keys()` :返回对象的可枚举的自有属性的名称组成的数组
存取器属性 getter/setter
对象定义存取器属性的方法:
var obj ={
get accessor_prop(){},
set accessor_prop(value){}
}
属性的特性
属性包含名字和4个特性;4个特性:值(value)、可写性(writalbe)、可枚举(enumerable)、可配置(configurable);
存取器属性的四个特性是:存、取、可枚举、可配置
属性描述符 Object.getOwnPropertyDescriptor()
只能得到自有属性的描述符
设置属性的特性:
Object.defineProperty(obj,prop,{value:1,writable:true,enumerable:false,configurable:ture});
设置多个属性的特性:
Object.definePropertys(obj,{prop:{value:1},prop2:{value:2}})
对象的三个属性
每个对象都有与之对应的:原型(prototype)、类(class)、可扩展性(extensible attribute)
原型属性
- 查询对象的原型属性:
Object.getPrototypeOf(obj);
- 判断P是否是S的原型:
P.isPrototypeOf(S)
类属性 是一个字符串,用以表示对象的类型信息。
可扩展性 用以表示是否可以给对象添加属性。
Object.isExtensible();
: 查询对象是否可扩展Object.preventExtensions();
: 禁止扩展Object.seal()
: 将对象设置:不可扩展且所有自有属性设置为不可配置,已有可写属性依旧可以设置Object.isSealed()
:检测对象是否封闭Object.freeze()
: 冻结对象:不可扩展、不可配置,属性只读Object.isFrozen()
: 检测对象是否冻结
对象方法
toString()
toLocaleString()
对数字、日期、时间做本地化转换
toJSON()
: 转化成JSON字符串
valueOf()
: 对象转换为原始值而非字符串时才会调用
hasOwnProtery()
:检测对象是否含有特定的自身属性,该方法会忽略掉那些从原型链上继承到的属性
propertyIsEnumerable()
:确定指定的属性是否可枚举,即被for…in循环枚举,但是通过原型链继承的属性除外
prototypeObj.isPrototypeOf(object)
: 搜寻prototypeObj否在参数object的原型链上
函数的5种调用模式
- 函数模式:this表示全局对象(浏览器中是window,在node 中是 global)
- 构造器 (constructor) 模式: this 表示刚刚创建出来的对象
- 方法(method)模式:this 表示引导方法调用的对象
- 上下文(context)模式:this 可以使用参数来动态的描述(动态绑定)
- bind 模式:this 与上下文模式类似,也是通过参数来确定(静态绑定)
上下文
函数在执行的时候会创建活动对象,活动对象中会存在一个上下文,就是函数中的this; call 和 apply 方法的第一个参数就是决定上下文的东西
- 传入什么 上下文 就是什么(this就是什么)
- 传入引用类型,除 null 外this就是此引用类型
- 传入基本类型,this 是它们转换成包装类型后的值
- 传入 null、undefined,上下文就是全局对象