Object.assign()
Object.assign()
方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
Object.create()
Object.create()
方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。
//现有对象 person
const person = {
isHuman: false,
printIntroduction: function() {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
//新创建的对象 me
const me = Object.create(person);
console.log(me)
Object.entries()
Object.entries()
方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for…in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)。
const person = {
isHuman: false,
printIntroduction: function() {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
//新创建的对象 me
const me = Object.create(person);
const object1 = {
a: 'somestring',
b: 42
};
console.log(Object.entries(object1)) //["a", "somestring"],["b", 42]
console.log(Object.entries(me))// []
Object.freeze()
Object.freeze()
方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze()
返回和传入的参数相同的对象。
const obj = {
prop: 42
};
let objc = Object.freeze(obj);
obj.prop = 33;// 冻结后无法修改
objc.prop = 33 //freeze() 返回的是传入的参数
console.log(obj.prop);// expected output: 42
console.log(objc.prop) // 42
Object.keys()
Object.keys()
返回一个对象key
值组成的数组,其元素来自于从给定的object
(不包括隐式原型)上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。
var myObj = Object.create({
getFoo: {
value: function () { return this.foo; }
},
s:100
});
myObj.foo = 1;
console.log(Object.keys(myObj)); // ['foo']
Object.is()
Object.is() 方法判断两个对象的关系是否为浅拷贝。
let obj = {a:2}
let c = obj
let d = {...obj}
console.log(Object.is(obj,c)) //true
console.log(Object.is(obj,d)) //false
Object.prototype.isPrototypeOf()
instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上
isPrototypeOf()
方法用于测试一个对象是否存在于另一个对象的原型链上。
isPrototypeOf()
与 instanceof
运算符不同。在表达式 "object instanceof AFunction"
中,object
的原型链是针对 AFunction.prototype
进行检查的,而不是针对 AFunction
本身。
但是,在isPrototypeOf()实际用法中,我们也是通过对象的显示原型来判断另一个对象是否在原型链上。
function In() {
this.a = 100
this.b = 200
}
In.prototype.c = 300
let ins = new In()
console.log(ins instanceof In) //true
console.log(ins instanceof Object) // true
function Foo() { }
function Bar() { }
function Baz() { }
Foo.prototype.foo = 100
Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.bar = 200
Baz.prototype = Object.create(Bar.prototype);
Baz.prototype.baz = 300
var baz = new Baz();
console.log(baz)
// 通过Baz.prototype对象来检查baz对象在不在原型链上
console.log(Baz.prototype.isPrototypeOf(baz)); // true
console.log(baz instanceof Baz) //true
console.log(Bar.prototype.isPrototypeOf(baz)); // true
console.log(Foo.prototype.isPrototypeOf(baz)); // true
console.log(Object.prototype.isPrototypeOf(baz)); // true
Object.defineProperty()
https://www.cnblogs.com/junjun-001/p/11761252.html#commentform