非常教程

JavaScript参考手册

对象 | Object

Object.getOwnPropertyDescriptors

Object.getOwnPropertyDescriptors() 方法用来获取一个对象的所有自身属性的描述符。

语法

Object.getOwnPropertyDescriptors(obj)

参数

obj任意对象

返回值

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

示例

Object.assign() 方法只能拷贝源对象的可枚举的自身属性,同时拷贝时无法拷贝属性的特性们,而且访问器属性会被转换成数据属性,也无法拷贝源对象的原型,该方法配合 Object.create() 方法可以实现上面说的这些。

A property descriptor is a record with some of the following attributes:

value与属性关联的值 (仅限数据描述符). 如果且仅当与该属性关联的值可能被更改时 (仅限数据描述符), 则为可写。

get用作属性的 getter 的函数; 如果没有 getter (仅限访问器描述符), 则为未定义。

set用作属性的 setter 的函数; 如果没有 setter (仅限访问器描述符), 则为未定义。

configurabletrue 如果且仅当此属性描述符的类型可能被更改, 并且该属性可以从相应的对象中删除。

enumerabletrue 如果且仅当在相应对象的属性枚举过程中显示此属性时。

示例

浅拷贝一个对象

Object.assign()方法只能拷贝源对象的可枚举的自身属性,同时拷贝时无法拷贝属性的特性们,而且访问器属性会被转换成数据属性,也无法拷贝源对象的原型,该方法配合Object.create()方法可以实现上面说的这些。

Object.create(
  Object.getPrototypeOf(obj), 
  Object.getOwnPropertyDescriptors(obj) 
);

创建子类

创建子类的典型方法是定义子类,将其原型设置为超类的实例,然后在该实例上定义属性。这可能会让尴尬,特别是对于 getters 和 setter 而言。 相反,您可以使用此代码设置原型:

function superclass() {}
superclass.prototype = {
  // Define your methods and properties here
};
function subclass() {}
subclass.prototype = Object.create(
  superclass.prototype,
  {
    // Define your methods and properties here
  }
);

规范

Specification

Status

Comment

ECMAScript Latest Draft (ECMA-262)The definition of 'Object.getOwnPropertyDescriptors' in that specification.

Living Standard

Initial definition in ECMAScript 2017.

ECMAScript 2017 (ECMA-262)The definition of 'Object.getOwnPropertyDescriptors' in that specification.

Standard

浏览器支持

Feature

Chrome

Edge

Firefox

Internet Explorer

Opera

Safari

Basic Support

54

(Yes)

50

No

41

10

Feature

Android

Chrome for Android

Edge mobile

Firefox for Android

IE mobile

Opera Android

iOS Safari

Basic Support

?

54

(Yes)

50

No

?

?

JavaScript

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络