ECMAScript笔记——对象扩展

这篇笔记详细介绍了ECMAScript中Object的扩展,包括使用Object.create创建新对象、Object.defineProperty和Object.defineProperties设置与修改对象属性,以及Obj对象的get和set方法。此外,还提到了JSON对象的转换方法,将JS对象与JSON对象相互转换。
摘要由CSDN通过智能技术生成

Object的扩展

ES5给0bject扩展了一些静态方法,下面列举较为常用的方法。

方法一

object. create(prototype, [descriptors])

作用:以指定对象为原型,创建新的对象。同时,第二个参数可以为新的对象添加新的属性。

举例1:(没有第二个参数时)

var obj1 = {username:'Lin',age:26};
var obj2 = {address:'HuiZhou'};

obj2 = Object.create(obj1);
console.log(obj2);

打印结果:
在这里插入图片描述
上方代码中,obj1成为了obj2的原型。

举例2:(有第二个参数时)

var obj1 = {username:'Lin',age:26};
var obj2 = {address:'HuiZhou'};

obj2 = Object.create(obj1,{
	sex: {
		value: '男',
		writable: false,
		configurable: false,
		enumerable: false
	}
});
console.log(obj2);

打印结果:
在这里插入图片描述
上方代码中,obj2设置了一个新的属性sex ,但是要通过value来设置属性值。设置完属性值后,这个属性值默认是不可修改的,要通过writable来设置。

可设置的属性:

  • value:设置属性值。
  • writable:标识当前属性值是否可修改。如果不写的话,默认为false ,不可修改。
  • configurable:标识当前属性是否可以被删除。默认为false ,不可删除。
  • enumerable:标识当前属性是否能用for in枚举。默认为false ,不可枚举。

方法二

Object.defineProperty(obj, prop, descriptor)

作用:在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。

举例1:

var obj1 = {username:'Lin',age:26};
var obj2 = {address:'HuiZhou'};

obj2 = Object.create(obj1,{
	sex: {
		value: '男',
		writable: false,
		configurable: false,
		enumerable: false
	}
});

Object.defineProperty(obj2,"address",{
	value: 'HuiZhou',
	writable: false,
	configurable: false,
	enumerable: false
});

console.log(obj2);

打印结果:
在这里插入图片描述

方法三

Object.defineProperties(object,descriptors)

作用:为指定对象定义扩展多个属性。

举例1:

var obj3 = {};

Object.defineProperties(obj3, {
	firstName: {
		value: 'Lin',
		enumerable: true
	},
	lastName: {
		value: 'Ht',
		enumerable: true
	},
	fullName: {
		get:function(){
			return this.firstName + '-' + this.lastName;
		},
		set:function(data){
			var names = data.split('-');
			this.firstName = names[0];
			this.lastName = names[1];
		},
		enumerable: true
	}
});

console.log(obj3);

for (let key in obj3) {
	let value = obj3[key];
	console.log({key,value});
}

打印结果:
在这里插入图片描述

  • get:用来获取当前属性值的回调函数。
  • set:修改当前属性值得触发的回调函数,并且实参即为修改后的值。

Obj 对象本身自带方法

get 属性名(){} 用来得到当前属性值的回调函数。
set 属性名(){} 用来监视当前属性值变化的回调函数。

举例1

var teacher = {
	firstname: "Lin",
	lastname: "Ht",
	age: "18",
	get fullname(){
		return this.firstname + '-' + this.lastname;
	},
	set fullname(data){
		var arr = data.split("-");

		if(arr.length==2){
			this.firstname = arr[0];
			this.lastname = arr[1];
		}else{
			console.error("输入的名字不规范");
		}
		
	},
	get brief(){
		return"我的名字是"+this.firstname + this.lastname+",我的年龄是"+this.age;
	}
};

console.log(teacher);

打印结果:
在这里插入图片描述

Json对象

通常情况下“json字符串”只有两种: json对象json数组。typeof json字符串的返回结果是string。
下面列举Json对象的两个方法。

1、js对象(数组) --> json对象(数组) :

JSON.stringify(obj/arr)

2、json对象(数组) --> js对象(数组) :

JSON.parse(json)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值