1. 程式人生 > >Object.create()

Object.create()

true blue def bject 是什麽 特性 訪問 對象創建 log

1.Object.create()是什麽?

Object.create(proto[,propertiesObject])是ES5中的一種新的對象創建方式,第一個參數是要繼承的原型,如果不是一個子函數,可以傳一個null,第二個參數是對象的屬性描述符,這個參數是可選的。

例子:

function Car(desc){

this.desc = desc;

this.color = red;

}

Car.prototype.getInfo = function () {

return ( this.color +" "+ this.desc);

}

var car = Object.create(Car.prototype);

car.color = "blue";

console.log(car.getInfo());

輸出結果:Ablue undefined

2.propertiesObject 參數的詳細解釋:(默認都為false)

數據屬性

writable:是否可任意寫

configurable:是否能夠刪除,是否能夠被修改

enumerable:是否能用 for in 枚舉

value:值

訪問屬性:

get():訪問

set():設置

3.例子:直接看例子怎麽用

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

Object.create()