1.建立对象
建立:对象直接量、new、Object,create()。
原型:每一个对象(除了null)都和另一个对象(原型)相关联,每一个对象都从原型继续属性(prototype)。
//比方
new Array()、[]
//建立的对象都继续自Array.prototype;
//Array.prototype又继续自Object.prototype,由此组成的一系列………………………………就是原型链。
建立对象create()的用法:
//create():
var o = Object.create({a:1,b:2});
//假如create(null)的话,他建立的对象不继续任何。
var o1 = Object.create(Object.prototype);
//如许则和new Object()雷同。
//经由过程原型建立新对象(模仿原型继续)
function inherit(p){
if(p == null){
throw TypeError();
}
if(Object.create){
return Object.create(p);
}
var t = typeOf p;
if(t != 'object' && t != 'function){
throw TypeError();
}
function f(){};
f.prototype = p;
return new f();
}
2.继续
what is
it?:假定一个对象obj,并查找他的属性o1,假如obj中存在则找到,假如不存在会在obj的原型中查找,假如还木有就在原型对象的原型上边查找,晓得找到了或许原型为null了。
var obj = {};
obj.o1 = 1;
var p = inherit(obj)//前边写过的一个函数;
p.o2 = 2;
p.o1 = 2;
console.log(p.toString());//找到Object.prototype中的toString();
console.log(p.o1);//找到obj.prototype,结果是3,之前提到的不会修正原型链。
属性接见毛病:
var obj = {};
console.log(obj.v.length);//抛出非常,由于undefined没有length属性。
//可以用下边的要领↓
var len = obj&&obj.v&&obj.v.length;
//应用&&的“短路性”,并在有操纵值为true的时刻返回其返回值。
3.删除属性
delete不可以删除继续属性,要删除就要在原型对象上删除,并且会影响一切继续它的对象。
var obj = {a:1};
delete obj.a;//delete obj['a'];删除a属性;
delete obj.b;//true
delete obj.toString();//true
delete 1;//true
4.检测属性
in运算符:检测对象以及对象原型链上是不是有某属性;
hasOwnProperty:检测对象自身是不是有某属性;
propertyIsEnumerable:检测对象自身是不是有某可罗列属性;
!==运算符:经由过程推断属性是不是!==undefined;
5.罗列属性
for/in罗列:会罗列出自行添加的属性,须举行推断;
//经由过程推断来罗列
for(var i in obj){
if(!obj.hasOwnProperty(i)) continue;
}
//经由过程extend来罗列↓一个不是很完美的extend
function extend(obj,obj1){
for(var i in obj1){
obj[i] = obj1[i]
}
return obj;
}
Object.keys()罗列:ES5;
Object.getOwnPropertyNames()罗列:ES5。
5.getter和setter
猎取和设置属性的要领
var obj = {
val:100,
get getval(){
return this.val;
},
set setval(x){
this.val = x;
}
}
6.属性的特征
数据属性:值、可写性、可罗列性、可设置性。
存取器属性:读取、写入、可罗列性、可设置性。
经由过程Object.getOwnPropertyDescriptor()来猎取自有特征。
经由过程definedProperty()/definedProperties()设置属性的特征。
Stronger的extend();
Object.defineProperty(Object.prototype,"extend",{
writable:true,
emuerable:false,
configration:true,
value:function(obj){
var names = Object.getOwnPropertyNames(obj);
for(var i = 0 ; i <names.length ; i++){
if(names[i] in this) continue;
var temp = Object.getOwnPropertyDescriptor(obj,names[i]);
Object.defineProperty(this,names[i],temp);
}
}
})
getter&setter老得API,非标准要领
_lookupGetter_
_lookupSetter_
_defineGetter_
_defineSetter_
7.原型属性
用Object.getPrototypeOf()查询原型。
未完~~~