美文网首页
Object的方法

Object的方法

作者: Haiya_32ef | 来源:发表于2018-01-16 22:00 被阅读0次
  • 1 Object.assign()
    用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
    Object.assign(target, ...sources)
    target:目标对象。
    sources:源对象。
    如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。
    注意,Object.assign 会跳过那些值为 null或 undefined 的源对象。
    如果拷贝的属性是引用类型,那么会相互影响
合并对象
var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。
  • 2.Object.create()
    使用指定的原型对象及其属性去创建一个新的对象。
    Object.create(proto[, propertiesObject])
    proto:新创建对象的原型对象。
    propertiesObject:可选。如果没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。
    return 在指定原型对象上添加新属性后的对象。
    如果proto参数不是 null或一个对象,则抛出一个 TypeError 异常
// Shape - 父类(superclass)
function Shape() {
  this.x = 0;
  this.y = 0;
}

// 父类的方法
Shape.prototype.move = function(x, y) {
  this.x += x;
  this.y += y;
  console.info('Shape moved.');
};

// Rectangle - 子类(subclass)
function Rectangle() {
  Shape.call(this); // call super constructor.
}

// 子类续承父类
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;

// 因为使用“.prototype =...”后,constructor会改变为“=...”的那个
// constructor,所以要重新指定.constructor 为自身。
混合类
function MyClass() {
     SuperClass.call(this);
     OtherSuperClass.call(this);
}

// 继承一个类
MyClass.prototype = Object.create(SuperClass.prototype);
// 混合其它
Object.assign(MyClass.prototype, OtherSuperClass.prototype);
// 重新指定constructor
MyClass.prototype.constructor = MyClass;

MyClass.prototype.myMethod = function() {
     // do a thing
};
  • 3 Object.defineProperties()
    直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
    Object.defineProperties(obj, props)
obj
  在其上定义或修改属性的对象。
props
  要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问  器描述符。描述符具有以下键:
    configurable
      true 当且仅当该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。
        默认为 false
     enumerable
        true 当且仅当在枚举相应对象上的属性时该属性显现。
      默认为 false
    writable
       `true`当且仅当与该属性相关联的值可以用assignment operator改变时。
        默认为 `false`
    get
      作为该属性的 getter 函数,如果没有 getter 则为undefined函数返回值将被用作属性的值。
        默认为 undefined
    set
    作为属性的 setter 函数,如果没有 setter 则为undefined函数将仅接受参数赋值给该属性的新值。
    默认为 undefined
var obj = {};
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
  // etc. etc.
});
    1. Object.defineProperty()
      直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
// 使用 __proto__
var obj = {};
var descriptor = Object.create(null); // 没有继承的属性
// 默认没有 enumerable,没有 configurable,没有 writable
descriptor.value = 'static';
Object.defineProperty(obj, 'key', descriptor);

// 显式
Object.defineProperty(obj, "key", {
  enumerable: false,
  configurable: false,
  writable: false,
  value: "static"
});

// 循环使用同一对象
function withValue(value) {
  var d = withValue.d || (
    withValue.d = {
      enumerable: false,
      writable: false,
      configurable: false,
      value: null
    }
  );
  d.value = value;
  return d;
}
// ... 并且 ...
Object.defineProperty(obj, "key", withValue("static"));

// 如果 freeze 可用, 防止代码添加或删除对象原型的属性
// (value, get, set, enumerable, writable, configurable)
(Object.freeze||Object)(Object.prototype);
  • 5 Object.entries(obj)
    返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 [for...in] 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。
const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]

// array like object
const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]

// array like object with random key ordering
const anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]

// getFoo is property which isn't enumerable
const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
myObj.foo = 'bar';
console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ]

// non-object argument will be coerced to an object
console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]

// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

// Or, using array extras
Object.entries(obj).forEach(([key, value]) => {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
});

new Map() 构造函数接受一个可迭代的entries。借助Object.entries方法你可以很容易的将Object转换为Map:

var obj = { foo: "bar", baz: 42 }; 
var map = new Map(Object.entries(obj));
console.log(map); // Map { foo: "bar", baz: 42 }

相关文章

  • Object的标准库

    Object 的静态方法 所谓的Object静态方法就是部署在Object对象本身的一些方法 Object.key...

  • Object类中常见的方法

    一.Object类中的toString()方法 object 默认方法 toString方法,toString()...

  • JavaScript的标准库

    1. Object对象 静态方法 所谓“静态方法”,是指部署在Object对象自身的方法。 Object.keys...

  • Object 对象

    分为 Object 静态方法和Object 实例方法 静态方法就是直接定义在Object 对象上 实力方法是定义在...

  • 前端理论面试-数据拷贝

    Object.assign()方法、slice()方法和concat()方法的拷贝 Object.assign()...

  • 标准库

    Object 对象 1. Object静态方法 (1) 对象属性模型的相关方法Object.keys() : 获取...

  • Object上的方法

    Object 对象 1. Object静态方法 (1) 对象属性模型的相关方法Object.keys() : 获取...

  • 对象方法 2019-12-15

    Array对象下的方法 String对象下的方法 some()方法 Object.keys()方法 Object....

  • 【Java技术专题】「原理专题」深入分析Java中finaliz

    finalize方法是什么 finalize方法是Object的protected方法,Object的子类们可以覆...

  • ES6 对象新增API

    Object(是函数)的新增 API: 下面的方法都是 Object 函数上面的方法 Object.is 用于判断...

网友评论

      本文标题:Object的方法

      本文链接:https://www.haomeiwen.com/subject/laeeoxtx.html