五十一.Object静态方法

113 阅读3分钟

静态方法

直接使用类名调用的方法(封装在函数上的方法)比如:返回毫秒:Date.now()就是静态方法,它也是返回毫秒等价于new Date().getTime()

Object静态方法

1.Object.getPrototypeOf()

Object.getPrototypeOf():获取传入的对象的原型对象,等价于返回传入的对象的__proto__属性。

image.png

image.png

2.Object.getOwnPropertyNames()

Object.getOwnPropertyNames():将传入的对象的可枚举和不可枚举的属性的名称组成一个数组,返回这个数组。

image.png

image.png

3.Object.keys()

Object.keys():取出传入的对象的所有成员名,放在一个数组中,返回这个数组。

image.png

image.png

4.Object.values()

Object.values():取出传入的对象成员的值,放在一个数组中返回但是不一定按照对象的顺序将成员的值放在数组中,可以实现对象转数组。

image.png

image.png

5.Object.defineProperty(obj,propName,desc)

Object.defineProperty(obj,propName,desc):该方法可以为obj新增一个名为propName的属性,同时它的属性定义为desc,desc使用一个对象赋值来详细定义对象某个成员的功能。desc就是属性描述符是一个普通对象,用于描述一个属性的相关信息,包括value,writable,enumerable,configurable(vue框架底层核心语法,vue实现数据双向绑定的原理)

image.png

image.png

以上代码就自定义了一个对象的属性的存值和取值。

image.png

image.png 以上就为obj新增了一个名为a的属性,设置它的值为默认值。wirtable可写,enumerable可枚举, configurable可更改(可更改的意思是否可更改writable、enumerable等,configurable为true时,该属性的描述符可以更改同时该属性可以从对应的对象上被删除)。wirtable可写,enumerable可枚举,configurable可更改,默认都为false。如果将属性a的writable设置为了false,然后更改它的值,虽然没有报错,但是它确实没有被更改而该属性的值就是value的值,如果在 use strict 模式下,将抛出错误。

在使用Object.defineProperty、Object.defineProperties 或 Object.create 函数的情况下添加数据属性,writable、enumerable和configurable默认值为false。

使用对象直接量创建的属性,writable、enumerable和configurable特性默认为true。

6.Object.create(proto,[props])

工厂函数:不用new关键字创建对象,调用一个函数创建了对象就是工厂函数。

Object.create(proto,[props]):以proto为原型,创建一个新对象,同时将props定义的属性设置给这个创建的新对象,定义属性时必须用使用一个对象赋值来详细定义对象成员功能。简而言之就是给创建的新对象指定其原型对象。

image.png

image.png

7.Object.getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor(obj,propName): 返回obj的属性propName的属性描述符。

image.png

image.png

8.Object.preventExtensions()

Object.preventExtensions(obj) 可以禁止obj对象的属性扩展,它将返回obj这个对象。将对象设置为不可扩展,那么即使给它添加一个新属性虽然没有报错,但这个新属性并没有添加到对象中。

image.png

image.png

9. Object.seal()

Object.seal(obj) 可以禁止obj对象的属性扩展和删除,它将返回obj这个对象。

image.png

image.png

Object.freeze()

Object.freeze(obj) 可以禁止对obj的所有操作,对象属性不可删除,不可更改,不可扩展,它将返回obj这个对象。

image.png

image.png

Object.isExtensible()、Object.isSealed()、Object.isFrozen()

Object.isExtensible(obj)、Object.isSealed(obj)、Object.isFrozen(obj) 分别对应了上述三个方法是否对obj进行了设置,返回布尔值。

image.png

image.png