new 关键字
创建一个基于原对象原型链的新对象。 具体看代码演示。
function a1(){}
a1.prototype.arg1 =1
a1.arg2 = 2
var a2 = new a1()
console.log(a2.arg1);//1,
console.log(a2.arg2);//undefined,arg2 为非原型链上的值
Object.create(object,properties) 方法
创建一个对象,原型链属性为object 参数的属性,自有属性为properties 的值,具体看下方代码演示。
var b1 = Object.create(null)
console.log(b1);//[Object: null prototype] {} 没有上级原型链的空对象
var b2 = Object.create(
{ name: 'John', gender: 'male' },
{
age: { value: 20 },
city: {
value: 'Henan',
writable: 'true',
configurable: 'true'
}
}
)
console.log(b2.name);//John
console.log(Object.hasOwnProperty(b2.name));//false
console.log(b2.age);//20
delete b2.age;
console.log(b2.age);//20,create的属性默认为不可配置
b2.age=30;
console.log(b2.age);//20,create的属性默认为不可修改
b2.city = "Shanghai";
console.log(b2.city); //Shanghai 手动改为true,才可配置修改
Object.assign(target,source)
只是将source的可枚举属性值分配给target对象
var c1 = Object.create({city:'Shanghai'},{
gender:{
value:'male',
enumerable:true
},
father:{
value:'John',
enumerable:false
}
})
var c3 ={
hobby1:'basketball',
hobby2:'football'
}
c3.hobby3 ="tennis"
c1.hobby = c3;
var c2 = Object.assign({name:'Tom',age:'20'},c1)
console.log(c2.name);//Tom
console.log(c2.gender);//male
console.log(c2.city);//undefined,原型链上的属性无法分配
console.log(c2.father);//undefined,不可枚举的属性无法分配
console.log(c2.hobby);//{ hobby1: 'basketball', hobby2: 'football', hobby3: 'tennis' },对象浅拷贝