对象——创建对象及操作
Posted y-dt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象——创建对象及操作相关的知识,希望对你有一定的参考价值。
创建对象
1.字面量
var obj = {x:1,y:2};
var obj2 = {
x:1,
y:2,
o:{
z:3,
n:4
}
};
2.new
function foo(){}
foo.prototype.z = 3;
var obj = new foo();
obj.y = 2;
obj.x = 1;
obj.x; //1
obj.y; //2
obj.z; //3
type of obj.toString; // ‘function‘
‘z‘ in obj; //true,z从foo.prototype继承而来
obj.hasOwnProperty(‘z‘); //false,obj这个对象本身没有z属性
function foo(){}
foo.prototype.z = 3;
var obj = new foo();
obj.y = 2;
obj.x = 1;
obj.z = 5;
obj.hasOwnProperty(‘z‘);//true
foo.prototype.z; //still 3
obj.z; //5
obj.z = undefined;
obj.z; //undefined
//此时如果要访问原型z,需要删除obj的z属性
delete obj.z; //true
obj.z; //3
delete obj.z; //再次删除,不会删除原型链
obj.z; //still 3!!!
3.create
创建一个对象,对象的原型指向里面的参数
var obj = Object.create({x:1});
obj.x; //1
typeof obj.toString //‘function‘
obj.hasOwnProperty(‘x‘);//false
var obj = Object.create(null);
obj.toString //undefined
属性操作
读写
var yz;
if(obj.y){ //检测属性
yz = obj.y.z
}
//利用运算符达到同样效果
var yz = obj && obj.y && obj.y.z
删除
var person = {age:20, title:‘fe‘};
delete person.age; //true
delete person[‘title‘];//true
person.age;//undefined
//再次删除不存在的属性
delete person.age; //true,还是会返回true
delete Object.prototype;//false
//因为Object.prototype被配置为不可修改;
var descriptor = Object.getOwnPropertyDescriptor(Object,‘prototype‘);
descriptor.configurable;//false
检测
var cat = new Object;
cat.legs = 4;
cat.name = ‘Kitty‘;
‘legs‘ in cat;//true
‘abc‘ in cat;//false
‘toString‘ in cat;//true,运算符in会向上查找,toString继承于Object.property
//检测属性是否为自身拥有
cat.hasOwnProperty(‘legs‘);//true
cat.hasOwnProperty(‘toString‘);//false
//检测属性是否可枚举
cat.propertyIsEnumberable(‘legs‘);//true
cat.propertyIsEnumberable(‘toSgring‘);//false
自定义属性
Object.defineProperty(cat,‘price‘,{enumerable:false,value:1000});
cat.propertyIsEnumberable(‘price‘);//false
cat.hasOwnProperty(‘price‘);//true
补充:属性一旦设置configurable:false,将不可再变回可配置
遍历属性
//如果不想遍历原型链的属性
for(key in obj){
if(obj.hasOwnProperty(key)){
//do something
}
}
Object.defineProperty(obj, prop, descriptor)
该方法多数默认值为false,而我们常用的定义方式多为可枚举,删除,赋值等
参数
obj
要在其上定义属性的对象。
prop
要定义或修改的属性的名称。
descriptor
将被定义或修改的属性描述符。
---
该方法允许精确添加或修改对象的属性。通过赋值来添加的普通属性会创建在属性枚举期间显示的属性(for...in 或 Object.keys 方法), 这些值可以被改变,也可以被删除。这种方法允许这些额外的细节从默认值改变。默认情况下,使用Object.defineProperty()添加的属性值是不可变的。
数据描述符和存取描述符均具有以下可选键值:
数据描述符
- configurable
当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。 - enumerable
当且仅当该属性的enumerable为true时,该属性才能够出现在对象的枚举属性中。默认为 false。 - value
该属性对应的值。可以是任何有效的 javascript 值(数值,对象,函数等)。默认为 undefined。 - writable
当且仅当该属性的writable为true时,value才能被赋值运算符改变。默认为 false
存取描述符
- get
一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。该方法返回值被用作属性值。默认为 undefined。
- set
一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined。
以上是关于对象——创建对象及操作的主要内容,如果未能解决你的问题,请参考以下文章