#6 对象
对象的创建*Creat
1.对象直接量
var empty={};
var point={x:0,y:0};
2.通过new创建
var o1=new Object();
var o2=new Date();
3.原型 Object.creat
除null以外,每一个js对象都有原型对象,并从原型继承属性。
var o3=Object.creat(Object.prototype);
Object.prototype.gg="good game";
//inherit: o3.gg="good game";
/*
原型链 o2 -> Date -> Object
o2继承Date & Object属性;同时可以选择性覆盖继承属性
*/
- 对象的查询和设定
备注:
- object.prototype = 0; //原型是只读属性,赋值失败
- defineProperty()可以对只读属性赋值
- 继承的只读属性,不能通过同名定义覆盖
character.hp==character[hp] //两个表达式值相同
object.undef; //undefined,访问不存在的属性,不报错
undefined.test;null.test; //访问不存在的对象,报类型错
- 属性删除,检测,枚举
//属性删除
delete object.property; //delete后不是属性表达式同样返回true
delete object.prototype;//不可配置属性,类型错误或者返回false
//属性检测
"hp" in character; //自有和继承
character.hasOwnProperty("hp"); //自有和继承
character.propertyIsEnumerable("hp"); //自有且可枚举
character.hp!==undefined; //属性值为undefined时,只能用in来判断
//枚举属性
for(p in o);
Object.keys();
Object.getOwnPropertyNames();
- 属性的特性
Object.getOwnPropertyDescriptor(object,property);
//数据属性=> {value:1,writable:true,enumerable:true,configurable:false}
//存取器属性=>{get:/*fun*/,set:undefined,enumerable:true,configurable:false}
//creat & modify property => Object.defineProperty({object},{property})
- 对象的3个属性
//原型属性
p.isPrototypeOf(o);
//类属性
object.toString();
classof(o);
//可扩展性
Object.esExtensible(); //查询
Object.preventExtentions(); //修改为不可扩展
Object.seal();Object.freeze(); //+不可配置,+只读
理想是人生的太阳 —— 德莱赛