js中new,Object.create,Object.assign 基本使用及区别

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' },对象浅拷贝
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容