ES6中关于Object.create方法

Object.create

Object.create : 创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

Object.create(proto, [propertiesObject])

proto : 必须。表示新建对象的原型对象,即该参数会被赋值到目标对象(即新对象,或说是最后返回的对象)的原型上。该参数可以是null, 对象, 函数的prototype属性 (创建空的对象时需传null , 否则会抛出TypeError异常)。

propertiesObject : 可选。添加到新创建对象的可枚举属性(即其自身的属性,而不是原型链上的枚举属性)对象的属性描述符以及相应的属性名称。

返回值:在指定原型对象上添加新属性后的对象。

关于new Object和Object.create的区别

	// new Object() 方式创建
	var a = {  rep : 'apple' }   
	var b = new Object(a)
	console.log("b = ",b)                			
	console.log("b.__proto__ = ",b.__proto__)      	// 指向Object最顶级的原型链
	console.log("b.rep = ",b.rep)            		
	console.log("a===b",a===b);						//true

	// Object.create() 方式创建
	var a1 = { rep: 'apple' }   
	var b1 = Object.create(a1)
	console.log("b1 = ",b1)  						
	console.log("b1.__proto__ = ",b1.__proto__)     // {rep: "apple"}  可以理解为继承一个对象, 添加的属性是在原型下。
	console.log("b1.rep = ",b1.rep) 			    
	console.log("a1===b1",a1===b1);					//false

ES6中关于Object.create方法_第1张图片
new Object() 通过构造函数来创建对象, 添加的属性是在自身实例下。
Object.create() es6创建对象的另一种方式,可以理解为继承一个对象, 添加的属性是在原型下。

介绍 Object.create 中的第二个可选参数propertiesObject的属性描述符以及相应的属性名称


	var c=Object.create({},{p:{
		value:42,
		}});
	var d=Object.getOwnPropertyDescriptor(c,"p");
	console.log("d=",d);

可选参数propertiesObject的属性描述值 configurable,enumerable,writable 默认为false
ES6中关于Object.create方法_第2张图片
设置propertiesObject的属性描述值

var c=Object.create({},{p:{

		value:42
		
		}});
	console.log(c.p);  				//42
	c.p="20";  				
	console.log(c.p);  				//42   writable 默认为false 无法修改
	delete c.p
	console.log(c.p);  				//42   configurable 默认为false 无法删除
	
	//可在创建时设置相关特性
	var dataObj=Object.create({name:"Tom"},{data:{
		value:"dataValue",
		writable:true,
		enumerable:true,
		configurable:false,
	}});
	dataObj.data="123";
	console.log(dataObj.data); 		//123

你可能感兴趣的:(ES5,ES5,Object,Object.create,原型,原型链)