1、Object.getPrototypeOf(obj)
该方法返回 obj 对象的原型对象,等同于 obj.__proto__。获取对象的原型对象推荐使用该方法而不是 obj.__proto__方法
参考:
function Person(){ this.name = 'jack'}let man = new Person();console.log(Object.getPrototypeOf(man) === Person.prototype); //trueconsole.log(Object.getPrototypeOf(man) === man.__proto__); //true
2、Object.defineProperty()
该方法会直接在一个对象上添加一个新属性,或者修改一个对象的现有属性, 并返回该对象。
Object.defineProperty(obj, prop, descriptor); //obj:要修改的对象 prop:要添加或修改的属性的名称。 descriptor:将属性描述符。
let obj = {};Object.defineProperty(obj, "key", { enumerable: false, configurable: false, writable: false, value: "static"});
3、Object.assign()
该方法用于将一个或多个源对象的所有可枚举属性的值复制到目标对象。它将改变目标对象然后返回目标对象。
Object.assign(target, source1, source2) //target:目标对象 source1、source:源对象
如果目标对象和源对象中的属性名重复,那么源对象将覆盖掉目标对象的属性值,后面的源对象将覆盖前面的源对象。
该方法是浅拷贝。假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。
let obj1 = { a: 0, b: { c: 0 }};let obj2 = Object.assign({}, obj1);console.log(obj2); // { a: 0, b: { c: 0}}obj1.a = 1; obj1.b.c = 3; //当源对象的属性值是一个对象时,改变该属性,目标对象也随之改变console.log(obj1); // { a: 1, b: { c: 3}}console.log(obj2); // { a: 0, b: { c: 3}}
可以利用JSON对象方法实现深拷贝
let obj1 = { a: 0, b: { c: 0 } }; let obj2 = JSON.parse(JSON.stringify(obj1)); obj1.a = 4; obj1.b.c = 4; //此时改变obj1属性的值,obj2不会随之改变 console.log(obj2); // { a: 0, b: { c: 0}}