Javascript中的对象-Object

Object对象的要领

当Object 被作为东西要领,而不是组织要领时,

  • Object(arg):包装要领,将非对象范例包装成一个对象

  • Object.create(proto[, propertiesObject]):

  • Object.getPrototypeOf(obj):

Object实例对象的要领

必需辨别“组织函数的要领”和“实例对象的要领”。

  • valueOf():返回当前对象对应的值。

  • toString():返回当前对象对应的字符串情势。
    这个要领很有效,能够用于推断对象范例

  • toLocalString():返回当前对象对应的当地字符串情势。

  • hasOwnProperty():推断某个属性是不是为当前对象本身的属性,照样继续自原型对象的属性。

  • isPrototypeOf():推断当前对象是不是为另一个对象的原型。

  • propertyIsEnumerable():推断某个属性是不是可罗列。

对象的属性模子

  • Object.getOwnPropertyDescriptor():猎取对象的属性的准确形貌模子

Object.defineProperty()
Object.defineProperties()
这两个要领有机能消耗,会拖慢实行速率,不宜大批运用。

可罗列性(enumerable)

假如一个属性的enumerable为false,下面三个操纵不会取到该属性。

for..in轮回

Object.keys要领
JSON.stringify要领(偶然能够应用这一点,为对象增添解释信息。)

因而,enumerable能够用来设置“隐秘”属性。
遍历对象属性要领

  • Object.keys()

  • Object.getOwnPropertyNames()
    平常情况下,险些老是运用Object.keys要领,遍历数组的属性。

存取器

var o ={
  $n : 5,
  get next(){return this.$n++ },
  set next(n) {
    if (n >= this.$n) this.$n = n;
    else throw "新的值必需大于当前值";
  }
};

o.next // 5

o.next = 10;
o.next // 10

应用存取器,能够完成数据对象与DOM对象的双向绑定。

对象拷贝

关于简朴属性,就直接拷贝,关于那些经由过程形貌对象设置的属性,则运用Object.defineProperty要领拷贝。

var extend = function (to, from) {
  var descriptor = Object.getOwnPropertyDescriptor(from, property);

  if (descriptor && ( !descriptor.writable
    || !descriptor.configurable
    || !descriptor.enumerable
    || descriptor.get
    || descriptor.set)) {
    Object.defineProperty(to, property, descriptor);
  } else {
    to[property] = from[property];
  }
}

掌握对象状况

JavaScript供应了三种要领,准确掌握一个对象的读写状况,防备对象被转变。最弱一层的庇护是preventExtensions,其次是seal,最强的freeze。

不可扩大对象(不能加,可改,可删)

Object.preventExtensions要领能够使得一个对象没法再增添新的属性。能够用delete敕令删除它的现有属性。
推断: Object.isExtensible(obj);

密封的对象(不能加,删,可改)

Object.seal要领使得一个对象既没法增添新属性,也没法删除旧属性。

推断: Object.isSealed(obj);

凝结的对象(不能加,不能改,不能删)

Object.freeze要领能够使得一个对象没法增添新属性、没法删除旧属性、也没法转变属性的值,使得这个对象现实上变成了常量。
推断: Object.isFrozen(obj);

局限性: 须要注重的是,运用上面这些要领锁定对象的可写性,然则依旧能够经由过程转变该对象的原型对象,来为它增添属性。

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