Object.assign()
用法:Object.assign(tarObj,obj1,obj2,…)
作用:将一个或者多个源对象的可枚举属性复制给目标对象
var obj1 = {
a: [1],
b: 2
};
var obj2 = {
c: 3,
d: 4
};
var tarObj = {
};
Object.assign(tarObj, obj1, obj2);
obj1.a.push(2); //对目标对象有影响
console.log(tarObj); //{a:[1,2],b:2,c:3,d:4}
console.log(obj1); //{a:[1,2],b:2}
console.log(obj2); //{c:3,d:4}
//可枚举属性指的是能通过遍历(for in)能取到的一些属性
Object.create()
var obj1 = {
a: 1
};
var obj2 = Object.create(obj1); //返回一个空对象,其__proto__指向了obj1
console.log(obj2); //obj2.__proto__ == obj1 */
Object.defineProperty()
作用:设置一个对象的属性,并且让这个属性变得可配置(是否可写,是否可遍历,是否可删除)
var obj3 = {
};
//给obj3添加一个属性e,值为5
Object.defineProperty(obj3, "e", {
value: 5, //添加属性值
enumerable: false, //是否可枚举
writable: false, //是否可写
configurable: true //是否可删
});
hasOwnProperty()
作用:判断一个属性是实例属性还是原型对象上的属性
function Person(age) {
this.age = age;
}
Person.prototype.a = 11;
var person = new Person(20);
console.log(person.hasOwnProperty("a")); //false
console.log(person.hasOwnProperty("age")); //true
isPrototypeof()
作用:判断一个实例对象是否在另一个对象的原型链上
用法:
function Person(age) {
this.age = age;
}
var person = new Person(20);
console.log(Person.prototype.isPrototypeOf(person); //true
console.log(Object.prototype.isPrototypeOf(person)); //true