博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS Object的静态方法汇总( 上 )
阅读量:6758 次
发布时间:2019-06-26

本文共 4142 字,大约阅读时间需要 13 分钟。

前言

最近在复习js的基础内容,特此做下总结。


以下内容参考MDN

1、Object.defintProperty()

这个方法是用来设置对象属性的一些特性。

语法

Object.defineProperty(obj, prop, descriptor)复制代码

参数

obj : 要定义或修改属性的对象。

prop : 要定义或修改的属性。

descriptor : 要定义或修改的特性

返回值

被设置后的对象。

关于特性

之前专门有篇文章介绍对象属性的特性。

示例

let obj = {    _age: 3};
Object.defineProperty(obj, 'name', { configurable: false, // 能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为访问器属性。 enumerable: false, // 能否通过 for-in 循环返回属性。 writable: true, // 能否修改属性的值 value: '张三' // 这个属性的数据值。})
Object.defineProperty(obj, 'age', { configurable: true, enumerable: true, get: function () { // 读取 age 属性时,会执行这个函数。返回值就是 age 的值。 return this._age; }, set: function (newValue) { // 写入 age 属性时,会执行这个函数。 if (newValue > 5) { this._age += newValue; } else { this._age = newValue; } }})复制代码

2、Object.defineProperties()

这个方法跟上面 Object.defineProperty()的作用是一样的。只不过这个方法可以定义多个属性。

示例

let obj = {    _age: 2};Object.defineProperties(obj, {    name: {        configurable: false,        writable: true,        value: '李四'    },    age: {        get: function () {            return this._age;         },        set: function (newValue) {            if (newValue > 5) {                this._age += newValue;            } else {                this._age = newValue;            }        }    }})复制代码

3、Object.getOwnPropertyDescriptor()

这个方法可以获取给定属性的特性。

语法

Object.getOwnPropertyDescriptor(obj, prop)复制代码

参数

obj : 目标所在的对象。

prop : 要获取特性的属性。

返回值

如果给定的属性存在于对象上,则返回属性描述符对象。否则返回 undefined

示例

var o, d;o = { get foo() { return 17; } };d = Object.getOwnPropertyDescriptor(o, "foo");// d {
// configurable: true,// enumerable: true,// get: /*the getter function*/,// set: undefined// }o = { bar: 42 };d = Object.getOwnPropertyDescriptor(o, "bar");// d {
// configurable: true,// enumerable: true,// value: 42,// writable: true// }o = {};Object.defineProperty(o, "baz", { value: 8675309, writable: false, enumerable: false});d = Object.getOwnPropertyDescriptor(o, "baz");// d {
// value: 8675309,// writable: false,// enumerable: false,// configurable: false// }复制代码

4、Object.getOwnPropertyDescriptors()

这个方法,用来获取一个对象所有自身属性的特性描述符。

语法

Object.getOwnPropertyDescriptors(obj)复制代码

参数

obj : 要获取的目标对象。

返回值

所指定的对象的所有自身属性的特性描述符,如果没有任何自身属性则返回空对象。

示例

  • 浅拷贝一个对象
    Object.assign()方法只能拷贝源对象的可枚举的自身属性,同时拷贝时无法拷贝属性的特性们,而且访问器属性会被转为数据属性,也无法拷贝源对象的原型。利用Object.getOwnPropertyDescriptors()配合 Object.create()可以实现上面说的这些。
    Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
    let obj = { width: '200', height: '200', color: 'red', arr: ['one', 'two'], sayWidth: function () { console.log('我的width:', this.width); }}let obj1 = Object.create(obj);let obj2 = Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));console.log('Obj1:', obj1); //'Obj1:' {}
    console.log('Obj2:', obj2);//'Obj2:' {// width: '200',// height: '200',// color: 'red',// arr: ['one', 'two'],// sayWidth: function () {// console.log('我的width:', this.width);// }// }复制代码

5、Object.getPrototypeOf()

这个方法返回给定对象的原型对象。

语法

Object.getPrototypeOf(obj)复制代码

参数

obj : 要获取原型的对象。

返回值

给定对象的原型。如果没有继承属性,返回 null

示例

function Person (name, age) {    this.name = name;    this.age = age;}Person.prototype.sayName = function () {    console.log(this.name);}let zhangsan = new Person('张三', 20);console.log(Object.getPrototypeOf(zhangsan));// {
// sayName: f () // }复制代码

6、Object.getOwnPropertyNames()

这个方法返回给定对象的所有自身属性的属性名(包括不可枚举属性,但不包括Symbol值作为名称的属性) 组成的数组。

语法

Object.getOwnPropertyNames(obj)复制代码

参数

obj : 目标对象。

返回值

在给定对象上找到的自身属性对应的字符串数组。

示例

  • 只获取可枚举的属性
    下面的例子使用 Array.prototype.filter()方法,从所有的属性名数组中去除不可枚举的属性。剩余的就是可枚举的属性
function getEnumable(target) {    let keyNames = Object.getOwmPropertyNames(target);    let keyAllNames = Object.keys(target);    let tempArr = [];    tempArr = keyNames.filter(item, index) {        if (keyAllNames.indexOf(item) > -1) {            return true;        } else {            return false;        }    }    return tempArr;}复制代码

今天先总结到这。明天继续。

转载于:https://juejin.im/post/5b3f442e5188251afb5c65a6

你可能感兴趣的文章
PHP 类名::class含义
查看>>
设计模式简介和分类,重点在总结
查看>>
数据库默认端口
查看>>
前端框架的区别,优缺点。
查看>>
oracle中使用sql语句创建表空间、用户、授权及使用命令导入导出
查看>>
layout中加载gif图片
查看>>
::符号
查看>>
“零甲醛”真的无污染?美博士环保开展调研
查看>>
unity博客 推荐(不断补充)
查看>>
图形处理的一些知识
查看>>
XPath
查看>>
[转]Shell脚本中获取SELECT结果值的方法
查看>>
No.2----数据类型(常用的)
查看>>
字符串指针
查看>>
锐捷网关交换机开启dhcp服务
查看>>
android 窃听电话
查看>>
链表例题
查看>>
POJ-1321 棋盘问题 搜索
查看>>
HDU-4478 Where is the King 搜索
查看>>
将博客搬至CSDN
查看>>