最近在看一些源码,发现底层框架经常用到一些通过Object调用的函数,因为我平时工作业务中很少会用到,所以每次都需要去mdn查,查了又忘。干脆在这里做个总结记录,加强记忆。
1.Object.prototype
Object.prototype
属性表示 Object
的原型对象。
描述:几乎所有的 JavaScript 对象都是 Object
的实例;一个典型的对象继承了Object.prototype
的属性(包括方法),尽管这些属性可能被遮蔽(亦称为覆盖)。但是有时候可能故意创建不具有典型原型链继承的对象,比如通过Object.create(null)
创建的对象,或者通过Object.setPrototypeOf
方法改变原型链。
改变Object
原型,会通过原型链改变所有对象;除非在原型链中进一步覆盖受这些变化影响的属性和方法。这提供了一个非常强大的、但有潜在危险的机制来覆盖或扩展对象行为。
2.Object.create()
Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的proto。
语法
Object.create(proto,[propertiesObject])
参数
proto
: 新创建对象的原型对象。
propertiesObject
: 可选。需要传入一个对象,该对象的属性类型参照Object.defineProperties()
的第二个参数。如果该参数被指定且不为 undefined
,该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。
返回值
一个新对象,带着指定的原型对象和属性。
例子
const person = {
isHuman: false,
printIntroduction: function() {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
const me = Object.create(person);
me.name = 'Matthew'; // "name" is a property set on "me", but not on "person",name是绑定在“me”的属性,不是“person”
me.isHuman = true; // inherited properties can be overwritten 继承的属性可以被重写
me.printIntroduction();
// 输出: "My name is Matthew. Am I human? true"
个人理解
就是me.__proto__ = person
3.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 }
4.Object.getOwnPropertyNames()
Object.getOwnPropertyNames()
方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
var Point = function (x, y) {
// ...
};
Point.prototype.toString = function () {
// ...
};
Object.keys(Point.prototype)
// ["toString"]
Object.getOwnPropertyNames(Point.prototype)
// ["constructor","toString"]
5.Object.prototype.hasOwnProperty()
hasOwnProperty()
方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。
const object1 = {};
object1.property1 = 42;
console.log(object1.hasOwnProperty('property1'));
// expected output: true
console.log(object1.hasOwnProperty('toString'));
// expected output: false
console.log(object1.hasOwnProperty('hasOwnProperty'));
// expected output: false
6.Object.getPrototypeOf
Object.getPrototypeOf()
方法返回指定对象的原型(内部[[Prototype]]属性的值)。
const prototype1 = {};
const object1 = Object.create(prototype1);
console.log(Object.getPrototypeOf(object1) === prototype1);
// expected output: true
网友评论