javascript对象创建方式

 

一个js对象中有 [[proto]] [[class]]  [[extensible]] 三个对象标签 ,在对象的属性上有 writable ,enumerable,configurable,value,get/set 五个属性标签

 

 [[proto]] 对象的原型
 [[class]]  对象所属的类型
[[extensible]] 是否可以增加新的属性
writable  对象的属性是否可写
enumerable 对象的属性是否可以枚举
configurable 对象的属性是否可删除
value 属性的值
get/set get set方法


 

 对象的创建


字面量创建对象

var obj = {};

obj.x = 1;

obj.y = 2; 


构造函数new创建对象

function foo(){
}

foo.prototype.z = 3;

var obj = new foo();

obj.x = 4;

console.info(obj.z); //out:3   obj对象的[[proto]] 会指向构造函数的prototype对象,在foo.prototype对象上存在z属性,所有能访问到z属性的值
console.info(obj.x); //out:4

'z' in obj  //true

obj.hasOwnProperty('z');  //false

 in 操作符,可以遍历对象的属性,但它不保证顺序,同时会遍历对象原型链上的属性。如果只需要遍历对象本身的属性,使用hasOwnProperty();

function fun(){}
fun.prototype.z = 3;

var obj = new fun();
obj.x = 5;
obj.u = 9;

for(i in obj){
   console.info(i);  //x u z
}  

for(i in obj){
   if(obj.hasOwnProperty(i)){
       console.info(i);     //x u
     }
}

 Object.create()创建对象

var obj = Object.create({x : 1});
obj.x // 1
obj.hasOwnProperty('x');// false  说明 obj的原型 执行了{x:1}


var obj = Object.create(null);
obj.toString // undefined   如果为null 它的原型会指向null

原文地址:https://www.cnblogs.com/dsitn/p/7051158.html