JavaScript对象

创建对象

字面量

var obj = {
	x:1,
	y:2
}

构造器

var obj = new Object();

自定义函数对象:
function Man(){
	this.z=1
};
var pepo = new Man();
pepo.z  				//1

原型链继承

var obj = Object.create(pepo); //原型链继承pepo对象
obj.z  					//2
obj.z =3 				//3
delete obj.z			//true
obj.z 					//2

特例:
var obj = Object.create(null);
typeof obj.toString //"undefined" 因为原型链是null null没有toString方法

读写对象属性

对象名称.属性名称 (obj.z)
对象名称[属性名称](obj[z])
注意:[]可以用于拼接。
读不存的属性返回:undefined

var yz = obj && obj.y && obj.y.z
// obj 没有 就返回undefined
// obj.y没有 就返回undefined
// obj.y.z没有 就返回undefined有就返回obj.y.z

get set 方法

//直接用age进行属性获取和赋值
var man = {
	$age:null,
	get age(){
	 return this.$age,
	},
	set age(val){
	 this.$age = val;
	},
}

//原型链上,遇到get set 就会先用get 和 set
function foo(){};
Object.defineProperty(foo.prototype,'z',{
	get:function(){
		return 1;
	}
});
var obj = new foo();
obj.z			//1
obj.z = 100; 	//100
obj.z  			//1 
//原型链上有get set 就用原型链的get 和 set。本案例原型链没有set 所以无法赋值。
//若要使用,可以重写obj的属性z defineProperty都是false
Object.defineProperty(obj,'z',{
	writable: true, enumerable: true, configurable: true
});

属性级的权限设置

属性值 value
是否可枚举 enumerable
是否可写 writable
是否可删除configurable

//初始
var obj = {
	x:1
}

//看
Object.getOwnPropertyDescriptor(obj,'x');
//{value: 1, writable: true, enumerable: true, configurable: true}

//创建
Object.defineProperty(obj,'z',{
	value:3,writable: true, enumerable: true, configurable: true
})//{x: 1, z: 3}

//defineProperties多个属性设置
Object.defineProperties(obj,{
	'a':{value:3,writable: true, enumerable: true, configurable: true},
	'b':{value:3,writable: true, enumerable: true, configurable: true}
})//{x: 1, z: 3, a: 3, b: 3}

对象标签

[proto] 原型
[class] 对象的类型 Object.prototype.toString 先转为对象再判断
[extensible] 对象是否可扩展

extensible 说明:
对象否可扩展查询
Object.isExtensible(obj);

对象禁止添加属性(不会影响属性)
Object.preventExtensions(obj);

将对象的所有属性 configurable设为false(seal会影响属性 但是不会影响原型链的属性):
Object.seal(obj);
对应的查询:
Object.isSeal(obj);

对象所有属性冻结(会影响属性 不会影响原型链)
Object.freeze(obj);
对应的查询:
Object.isFroze(obj)

序列化/其它对象化

对象转JSON

JOSN.stringify(obj);//转json ;
缺点:

  1. 值是undefind 属性会丢掉
  2. 值是NaN 转为 null
  3. 时间会转为UTC

JSON转对象

JOSN.parse(obj);

序列化自定义

序列化-自定义
var obj = {
	x:1,
	y:2,
	o:{
		o1:1,
		o2:2,
		toJSON:function(){
			return this.o1 + this.o2;//返回自定义的o
		}
	}

};
JSON.stringify(obj);
//"{"x":1,"y":2,"o":3}"

其它对象方法

对象先转为基本数据类型,既调用valueOf。
然后判断valueOf返回值是否为基本数据类型,若是就用valueOf返回值进行逻辑操作。
若不是就调用toString()方法。

var obj = {x:1,y:2};
obj.toString(); //"[object Object]"

//重写toString 
obj.toString = function(){
	return this.x + this.y;
};
'c'+obj //"c3" 对象加号前先调用了toString

//重写valueOf 
obj.valueOf = function(){
	return this.x + this.y+100;
};
'c'+obj //"c103"  toString 和 valueOf  都存在,先调用valueOf。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值