js--Object的靜態方法和例項方法

weixin_33924312發表於2017-03-24
Object.create(proto[, propertiesObject])
  • 用於建立新物件,第一個引數是新物件的原型,第二個引數用於設定物件的屬性,以及對屬性進行進一步描述(descriptor)。
  • 建立完全空物件:var o1 = Object.create(null) \\ 一個沒有原型的物件,此時連最基本的toString(),valueOf()方法都沒有
  • 建立普通空物件:var o2 = Object.create(Object.prototype) \\效果和new Object()、{}一樣
  • 配置第二個引數:
    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)
    }
    }
    })`
  • descriptor的取值有如下幾種:
  • value:屬性的值,預設為undefined
    -writable:如果為false,屬性的值就不能被重寫,只能為只讀了
  • configurable:總開關,一旦為false,就不能再設定他的(value,writable,configurable)
  • enumerable:是否能在for...in迴圈中遍歷出來或在Object.keys中列舉出來。
  • get:不寫則預設為undefined,下同
  • set:想用(get 和 set),就不能用(wriable 或 value中的任何一個)
注意區分:如果是運用Object.defineProperty(),如果不指定,則configurable、enumerable 、writable 預設為false,但是如果是直接在物件{}上定義的configurable、enumerable 、writable,則預設為true。
  • 訪問器屬性:configurable,enumberable,get,set。
物件屬性描述符:Object.getOwnPropertyDescriptor(obj, prop)
  • 傳入引數分別是物件,以及相應的屬性名。
  • 如果是資料屬性,則具有configurable、enumerable 、writable、value等4個值。
  • 如果是訪問器屬性,則具有configurable,enumberable,get,set等4個值。
Object.defineProperty(obj, prop, descriptor)
  • 方法會直接在一個物件上定義一個新屬性,或者修改一個已經存在的屬性, 並返回這個物件。

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

Object.defineProperties(obj, props)
  • 方法在一個物件上新增或修改一個或者多個自有屬性,並返回該物件。

var obj = {};Object.defineProperties(obj, { "property1": { value: true, writable: true }, "property2": { value: "Hello", writable: false } // 等等.});alert(obj.property2) //彈出"Hello"來源: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties

Object.getPrototypeOf( obj )
  • 返回傳入的例項物件的原型
  • isPrototype()可以判斷一個原型物件是否是傳入的例項引數的原型,例:Person.prototype.isPrototypeOf( person1 )

相關文章