js--Object的静态方法和实例方法

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 )

你可能感兴趣的:(js--Object的静态方法和实例方法)