一个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
时间: 2024-09-28 16:42:27