JS进修之Object

媒介

上篇文章引见了JS的对象,本文将引见Object这个基类,重要引见其属性和要领(实在这些在MDN里都有^_^,点击这里可以纵贯MDN)。好了空话不多说了,直接最先。文中的Object多为组织函数Object

原型对象

  • Object.prototype
    prototype属性为函数的专属属性,示意函数的原型对象。该属性示意Object对象的原型对象,此处的Objcet为组织函数Object而不是对象实例。下图可以证实。

《JS进修之Object》

  • Object.prototype.__proto__
    该属性为接见器属性,即为有get和set函数的属性,可以直接赋值。若有对象实例obj则可直接接见该属性obj.__proto__

  • Object.getPrototypeOf(obj)
    该要领获得对象实例obj的原型对象。获得的对象与对象的__proto__属性的值雷同。

  • Object.setPrototypeOf(obj, prototype)
    该要领是将prototype对象设为obj对象的原型对象。该要领是ES6的范例。

  • prototypeObject.isPrototypeOf(obj)
    该要领推断prototypeObject对象是不是在obj对象的原型链上。

关于种种数据范例的prototype属性的展现
《JS进修之Object》

《JS进修之Object》

对象的组织器函数

  • Object.prototype.constructor
    该属性指向建立该对象原型的组织函数。其返回为一个详细的函数而不是援用或对象。

对象的属性

  • Object.defineProperty(obj,prop,desc)Object.defineProperties(obj, {prop1:desc1, prop2:desc2})
    上面两个要领都是给对象obj增加或修正本身属性,前者只能操纵一个属性,或许可以操纵多个属性。其参数中prop为属性名,desc为属性描述符。两个要领都返回转变后的对象obj。

  • Object.getOwnPropertyNames(obj)
    该要领获得对象obj的一切本身属性的属性名构成的数组(包含不可罗列属性)。数组中元素的分列递次未知(以我本身有限的几个例子看,应该是按定义的前后递次分列)。

  • Object.getOwnPropertyDescriptor(obj, prop)Object.getOwnPropertyDescriptors(obj)
    两个要领都是猎取对象obj的本身属性的属性描述符,前者只是获得某个属性的描述符,后者猎取全部对象的一切本身属性的描述符。

  • Object.entries(obj)
    该要领返回对象本身属性中一切可罗列的属性的键值对(属性名:值)构成的数组。

  • Object.keys(obj)
    该要领与上面的要领类似,也是遍历对象中的可罗列属性,只是此要领返回的是对象中可罗列的本身属性的属性名构成的数组。

  • Object.getOwnPropertySymblos(obj)
    该要领会返回一个数组,该数组包含了指定对象本身的(非继续的)一切 symbol 属性键。(此要领为ES6范例)

  • Object.prototype.propertyIsEnumerable(prop)(obj.propertyIsEnumerable(prop))
    推断属性prop是不是是对象obj的可罗列的本身属性。

  • Object.prototype.hadsOwnProperty(prop)(obj.hadsOwnProperty(prop))
    推断obj对象是不是含有prop本身属性。

对象扩大及新建

  • Object.assign(target, ...sources)
    该要领可以把恣意多个的源对象本身的可罗列属性拷贝给目的对象,然后返回目的对象。

  • Object.create(prototype, [ propertiesObject ])
    该要领建立一个具有指定原型和若干个指定属性的对象。

对象状况

  • Object.preventExtensions(obj)、’Object.isExtensible(obj)’
    对对象的可扩大状况设置和推断,对象默承认扩大。前者是让obj对象变得不可扩大。后者是推断obj对象是不是可以扩大。

  • Object.seal(obj)`Object.isSealed(obj)`
    对对象的密封状况的设置和推断。前者让obj对象密封,后者推断obj对象是不是被密封。密封对象是指那些不能增加新的属性,不能删除已有属性,以及不能修正已有属性的可罗列性、可设置性、可写性,但能够可以修正已有属性的值的对象。

  • Object.freeze(obj)Object.isFrozen(obj)
    对对象的凝结状况的设置和推断,前者让凝结obj对象,后者推断对象obj是不是被凝结。凝结指的是不能向这个对象增加新的属性,不能修正其已有属性的值,不能删除已有属性,以及不能修正该对象已有属性的可罗列性、可设置性、可写性。也就是说,这个对象永远是不可变的。该要领返回被凝结的对象。

其他

  • Object.is(value1, value2)
    该要领为同值推断,即推断value1value2是不是为同一个值,与===号差别的是,该要领会将两个NaN推断为同一个值,而+0-0为差别的值。

  • Object.prototype.toLocalString()Object.prototype.toString()
    返回一个示意该对象的字符串。toLocaleString()要领重要用于被本地化相干对象掩盖。掩盖了该要领的对象有ArrayNumberDatetoString()要领可以用来检测对象范例。其用法为Object.prototype.toString.call(obj),其返回值的花样为[object ObjectName]

  • Object.prototype.valueOf()
    该要领返回对象的原始值。这个要领用的不多,大多数状况下JS会自动挪用此函数,别的一些就是其他对象重写了此函数的状况。

结语

本人初学JS,内容基本上从MDN上搬过来的本身的明白不是许多,再加上初中作文凑不齐600字的语文程度(-_-|)……
本文内容若有讹夺,望请斧正,不胜感激!

    原文作者:witzzy
    原文地址: https://segmentfault.com/a/1190000008112368
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞