首页 > 代码库 > JS和JQ的总结:对象

JS和JQ的总结:对象

1、对象的基本操作  create  set  query delete test  enumerate

2、对象的属性特性  可写  可枚举  可配置(是否可删除)

3、对象的对象特性 

对象的原型 prototype

对象的类  标示对象类型的字符串

对象的扩展标记  是否可添加新属性

 //创建对象的三种方法

 4、对象直接量

 var empty = {};

 var point = {x:0,y:0};

5、new创建对象

 var o = new Object();  //空对象  和{}一样

 var a = new Array();

 6、Object.create()

 var o1 = Object.create({x:1,y:2});  //o1 继承自对象原型{x:1,y:2}

 var o2 = Object.create(null);       //o2不继承任何属性和方法

 var o3 = Object.create(Object.prototype); 

 //空对象和 {} new Object()一样

7、属性的操作  作为关联数组的对象

 object.property

 object["property"]   散列  映射  字典 关联数组

8、继承

 js的继承只能从父类获取属性的值,而不能修改原型链

 如果对象book为null或undefined

 book.subtitle.length会报错

  解决方法

 var len = book && book.subtitle && book.subtitle.length;

 删除属性

  delete book.subtitle

检测属性  in  hasOwnPreperty()  propertyIsEnumerable()

 var o = {x:1};

 "x" in o

  "toString" in

 hasOwnPreperty();判断属性是否是自己的。继承属性返回false

propertyIsEnumerable() 只有是自有属性,并可枚举

获取所有属性

  Object.keys()

 Object.getOwnPropertyNames()

9、属性getter和setter

 var o = {

 x: 0,

 y: 1,

 set r(value) { value = http://www.mamicode.com/this.r;},

 get r() { return this.x + this.y;}

 };

 x数据属性,r存取器属性

10、属性的特性  ecmascript5   老的ie不支持如下用法

 数据属性的特性:值value 可写性writable

可枚举enumerable

 可配置configurable

存取器属性特性:get  set

 可枚举enumerable

 可配置configurable

  //返回{value:1,writable:true,emunerable:true,configurable:true}

  Object.getOwnPropertyDescriptor({x:1},x)

  //查不到属性 返回undefined

 设置属性的特性  不能修改继承的属性特性

  Object.defineProperty()

 //设置不可枚举属性

 var o = {};

 Object.defineProperty(o,"x",{

 value:1,

writable:true,

emunerable:false,

configurable:true

 })

 //设置只读

 Object.defineProperty(o,"x",{writable:false})

 修改多个属性特性

 Object.defineProperties()

扩展Object.prototype   书 P137

 11、对象的三个属性

 prototype  class  extensible attribute

 查询对象的原型

 ecmascript5中 Object.getPrototypeOf(o1)

 ecmascript3中 o1.constructor.prototype

通过对象直接量或new Object()方式创建的对象

 包含一个constructor的属性,指Object()的构造函数

 constructor.prototype才是真正的原型

p.isPrototypeOf(o)检测对象p是否是o的原型

 //获取对象的类型 字符串

 Object.prototype.toString.call(o1).slice(8,-1)

 12、对象的可扩展性

 对象是否可以新加属性

 Object.preventExtensions() 设置对象不可扩展

 Object.isExtensible()

 Object.seal()  除了将对象设置为不可扩展,还将属性设置为不可配置

 Object.freeze()

 除了将对象设置为不可扩展,将属性设置为不可配置,还把属性设置为只读

 

JS和JQ的总结:对象