1. 程式人生 > >Object的方法

Object的方法

fill con 創建對象 may else htm first 屬性 tps

1、Object.assign() 方法用於將所有可枚舉屬性的值從一個或多個源對象復制到目標對象。它將返回目標對象。 ES2015引入的

,且可用polyfilled。要支持舊瀏覽器的話,可用使用jQuery.extend或者_.assign()。

2、Object.create() 方法會使用指定的原型對象及其屬性去創建一個新的對象。

語法:

Object.create(proto[, propertiesObject])

實現類式繼承

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
};  

使用 Object.createpropertyObject參數

var o;

// 創建一個原型為null的空對象
o = Object.create(null);


o = {};
// 以字面量方式創建的空對象就相當於:
o = Object.create(Object.prototype);


o = Object.create(Object.prototype, {
  // foo會成為所創建對象的數據屬性
  foo: { 
    writable:true,
    configurable:true,
    value: "hello" 
  },
  // bar會成為所創建對象的訪問器屬性
  bar: {
    configurable: false,
    get: function() { return 10 },
    set: function(value) {
      console.log("Setting `o.bar` to", value);
    }
  }
});


function Constructor(){}
o = new Constructor();
// 上面的一句就相當於:
o = Object.create(Constructor.prototype);
// 當然,如果在Constructor函數中有一些初始化代碼,Object.create不能執行那些代碼


// 創建一個以另一個空對象為原型,且擁有一個屬性p的對象
o = Object.create({}, { p: { value: 42 } })

// 省略了的屬性特性默認為false,所以屬性p是不可寫,不可枚舉,不可配置的:
o.p = 24
o.p
//42

o.q = 12
for (var prop in o) {
   console.log(prop)
}
//"q"

delete o.p
//false

//創建一個可寫的,可枚舉的,可配置的屬性p
o2 = Object.create({}, {
  p: {
    value: 42, 
    writable: true,
    enumerable: true,
    configurable: true 
  } 
});

  

Polyfill

這個 polyfill 涵蓋了主要的應用場景,它創建一個已經選擇了原型的新對象,但沒有把第二個參數考慮在內。

請註意,盡管在 ES5 中 Object.create支持設置為[[Prototype]]null,但因為那些ECMAScript5以前版本限制,此 polyfill 無法支持該特性。

if (typeof Object.create !== "function") {
    Object.create = function (proto, propertiesObject) {
        if (typeof proto !== ‘object‘ && typeof proto !== ‘function‘) {
            throw new TypeError(‘Object prototype may only be an Object: ‘ + proto);
        } else if (proto === null) {
            throw new Error("This browser‘s implementation of Object.create is a shim and doesn‘t support ‘null‘ as the first argument.");
        }

        if (typeof propertiesObject != ‘undefined‘) throw new Error("This browser‘s implementation of Object.create is a shim and doesn‘t support a second argument.");

        function F() {}
        F.prototype = proto;

        return new F();
    };
}

_.assign

js:https://lodash.com/vendor/cdn.jsdelivr.net/npm/[email protected]/lodash.min.js

function Foo() {
  this.a = 1;
}
 
function Bar() {
  this.c = 3;
}
 
Foo.prototype.b = 2;
Bar.prototype.d = 4;
 
_.assign({ ‘a‘: 0 }, new Foo, new Bar);
// => { ‘a‘: 1, ‘c‘: 3 }

_.assignIn

function Foo() {
  this.a = 1;
}
 
function Bar() {
  this.c = 3;
}
 
Foo.prototype.b = 2;
Bar.prototype.d = 4;
 
_.assignIn({ ‘a‘: 0 }, new Foo, new Bar);
// => { ‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4 }

  

Object的方法