js对象几种方法

javaScript中定义了两种不一样的属性:数据属性和访问器属性。数据属性通常用于存储数据数值,而访问器属性通常用于get/set操做,不能直接存储数据数值在ES5中,咱们为了描述属性(property)的各类特征,定义了特性(attribute)。在JavaScript中不能直接访问特性,咱们把它放在两对方括号中,html

数据属性 java

访问器属性bash

defineProperty

ECMAScript 5 的 Object.defineProperty()方法。这个方法 接收三个参数:属性所在的对象、属性的名字和一个描述符对象。其中,描述符(descriptor)对象的属 性必须是:configurable、enumerable、writable 和 value。设置其中的一或多个值,能够修改 对应的特性值。例如:函数

var person = {};
Object.defineProperty(person, "name", {
    writable: false,
    value: "Nicholas"
});
alert(person.name); //"Nicholas" 
person.name = "Greg"; 
alert(person.name); //"Nicholas"
复制代码

在调用 Object.defineProperty()方法时,若是不指定,configurable、enumerable 和 writable 特性的默认值都是 false。多数状况下,可能都没有必要利用 Object.defineProperty() 方法提供的这些高级功能ui

var book = {
    _year: 2004,
edition: 1 };
Object.defineProperty(book, "year", {
    get: function(){
        return this._year;
    },
    set: function(newValue){
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue - 2004;
} }
});
book.year = 2005; 
alert(book.edition); //2
复制代码

以上代码建立了一个 book 对象,并给它定义两个默认的属性:_year 和 edition。_year 前面 的下划线是一种经常使用的记号,用于表示只能经过对象方法访问的属性。而访问器属性 year 则包含一个 getter 函数和一个 setter 函数。getter 函数返回_year 的值,setter 函数经过计算来肯定正确的版本。所以, 把 year 属性修改成 2005 会致使_year 变成 2005,而 edition 变为 2。这是使用访问器属性的常见方 式,即设置一个属性的值会致使其余属性发生变化。this

不必定非要同时指定 getter 和 setter。只指定 getter 意味着属性是不能写,尝试写入属性会被忽略。 在严格模式下,尝试写入只指定了 getter 函数的属性会抛出错误。相似地,只指定 setter 函数的属性也 不能读,不然在非严格模式下会返回 undefined,而在严格模式下会抛出错误。spa

object.defineProperties

利用这个方法能够经过描述符一次定义多个属性。这个方法接收两个对象参数:第一 个对象是要添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对 应。例如:code

var book = {};
    Object.defineProperties(book, {
        _year: {
            value: 2004
        },
        edition: {
            value: 1
},
        year: {
            get: function(){
               return this._year;
    },
    set: function(newValue){
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue - 2004;
        }
} }
})
复制代码

Object.getOwnPropertyDescriptor()

能够取得给定属性的描述 符。这个方法接收两个参数:属性所在的对象和要读取其描述符的属性名称。返回值是一个对象,若是 是访问器属性,这个对象的属性有 configurable、enumerable、get 和 set;若是是数据属性,这 个对象的属性有 configurable、enumerable、writable 和 value。例如:cdn

var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
alert(descriptor.value); //2004
alert(descriptor.configurable); //false 
alert(typeof descriptor.get); //"undefined"
复制代码

var descriptor = Object.getOwnPropertyDescriptor(book, "year"); alert(descriptor.value); //undefined alert(descriptor.enumerable); //false
alert(typeof descriptor.get); //"function"

复制代码

建立对象的几种方法

跳转连接htm

相关文章
相关标签/搜索