成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

對象屬性

ispring / 3214人閱讀

摘要:作用修改屬性默認的特性參數(shù)屬性所在的對象屬性的名字和一個描述符對象。描述符對象的屬性必須是和。這個方法接收兩個參數(shù)屬性所在的對象和要讀取器描述符的屬性名稱。

屬性的類型

ECMA-262 第 5 版在定義只有內(nèi)部才用的特性(attribute)時,描述了屬性(property)的各種特征。定義這些屬性是為了實現(xiàn)JavaScript引擎用的,因此在JavaScript中不能直接訪問它們。為了我表示特性是內(nèi)部值,改規(guī)范把它們放在了兩對兒方括號中,例如[[Enumerable]]。

ECMAScript 中有兩種屬性:數(shù)據(jù)屬性和訪問器屬性

1.數(shù)據(jù)屬性

數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。在這個位置可以讀取和寫入值。數(shù)據(jù)屬性有 4 個描述其行為的特性。

[[Configurable]]:表示能否通過 delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。直接在對象上定義的屬性,它們的這個特性默認值為 true。

[[Enumerable]]:表示能否通過 for-in 循環(huán)返回屬性。直接在對象上義的屬性,它們的這個特性默認值為 true。

[[Writable]]:表示能否修改屬性的值。直接在對象上定義的屬性,它們的這個特性默認值為 true。

[[Value]]:包含這個屬性的數(shù)據(jù)值。讀取屬性值的時候,從這個位置讀;寫入屬性值的時候,新值保存在這個位置。這個特性的默認值為 undefined。

Object.defineProperty()

作用:修改屬性默認的特性
參數(shù):屬性所在的對象、屬性的名字、和一個描述符對象。描述符對象的屬性必須是configurable、enumerable、writable 和 value。

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

一旦把configurable屬性定義為不可配置的,就不能再把它變回可配置了。此時,再調(diào)用 Object.defineProperty()方法修改除 writable 之外
的特性,都會導(dǎo)致錯誤

var person = {}; 
Object.defineProperty(person, "name", { 
    configurable: false, 
    value: "Nicholas" 
}); 
//拋出錯誤
Object.defineProperty(person, "name", { 
    configurable: true, 
    value: "Nicholas" 
});

在調(diào)用 Object.defineProperty()方法時,如果不指定,configurable、enumerable 和writable 特性的默認值都是 false(未調(diào)用改方法時默認值都為true)

2. 訪問器屬性

訪問器屬性不含數(shù)據(jù)值;他們包含一對兒getter和setter函數(shù)(不是必需的)。在讀取訪問器屬性時,會調(diào)用getter函數(shù),這個函數(shù)負責(zé)返回有效的值;在寫入訪問器屬性時,會調(diào)用setter函數(shù)并傳入新值。這個函數(shù)負責(zé)如何處理數(shù)據(jù)

訪問器的四個屬性:

[[Configurable]]:表示能否通過 delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為數(shù)據(jù)屬性。對于直接在對象上定義的屬性,這個特性的默認值為true。

[[Enumerable]]:表示能否通過 for-in 循環(huán)返回屬性。對于直接在對象上定義的屬性,這個特性的默認值為 true。

[[Get]]:在讀取屬性時調(diào)用的函數(shù)。默認值為 undefined。

[[Set]]:在寫入屬性時調(diào)用的函數(shù)。默認值為 undefined。

訪問器屬性不能直接定義,必須使用 Object.defineProperty()來定義。

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

支持 ECMAScript 5 的這個方法的瀏覽器有 IE9+(IE8 只是部分實現(xiàn))、Firefox 4+、Safari 5+、Opera 12+ 和 Chrome 。在這個方法之前,要創(chuàng)建訪問器屬性,一般都使用兩個非標準的方法:__defineGetter__()和__defineSetter__()。這兩個方法最初是由 Firefox 引入的,后來 Safari 3、Chrome 1 和 Opera 9.5 也給出了相同的實現(xiàn)

var book = { 
     _year: 2004, 
     edition: 1 
}; 
//定義訪問器的舊有方法
book.__defineGetter__("year", function(){ 
     return this._year; 
}); 
book.__defineSetter__("year", function(newValue){ 
 if (newValue > 2004) { 
     this._year = newValue; 
     this.edition += newValue - 2004; 
 } 
}); 
book.year = 2005; 
alert(book.edition); //2 
AccessorPropertiesExample02.htm 
在不支持 Object.defineProperty() 方法的瀏覽器中不能修改 [[Configurable]] 和 [[Enumerable]]。  
  
2 定義多個屬性

Object.defineProperties()方法,利用這個方法可以通過描述符一次定義多個屬性。這個方法接收兩個對象參數(shù):第一個對象是要添加和修改器屬性的對象,第二個對象的屬性和第一個對象中要添加或修改的屬性一一對象。

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; 
            } 
        } 
    } 
});
3 讀取屬性的特性

Object.getOwnPropertyDescriptor()方法,可以取得給定屬性的描述符。這個方法接收兩個參數(shù): 屬性所在的對象和要讀取器描述符的屬性名稱。返回值是一個對象,如果是訪問器屬性,這個對象的屬性有configurable、enumerable、get 和 set;如果是數(shù)據(jù)屬性,這個對象的屬性有 configurable、enumerable、writable 和 value。

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; 
             } 
         } 
     } 
}); 
var descriptor = Object.getOwnPropertyDescriptor(book, "_year"); 
alert(descriptor.value); //2004 
alert(descriptor.configurable); //false

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/103465.html

相關(guān)文章

  • 犀牛書——CHAP6:對象

    摘要:對象是屬性的無序集合。使用對象直接量創(chuàng)建的對象的原型就是,使用運算符創(chuàng)建的對象的原型是構(gòu)造函數(shù)的的值。主要目的是將對象鎖定,避免外界干擾。判斷對象是否封閉。刪除屬性可刪除對象的自有屬性且為的屬性。 對象是屬性的無序集合。因此,這一章主要從對象和屬性兩個方面來闡述。showImg(https://box.worktile.com/view/c8f5f376fe314aeca69d9b4c...

    philadelphia 評論0 收藏0
  • 關(guān)于JavaScript對象,你所不知道的事(二)- 再說屬性

    摘要:但好在還給我們提供了一個方法,每一個對象都有這樣一個方法,專門用來判斷某個屬性是否是該對象的私有屬性。如果你想要用對象字面形式,你只能在創(chuàng)建對象時定義訪問器屬性。在中,我們使用凍結(jié)一個對象,并且使用來判斷一個對象是否被凍結(jié)。 說完了對象那些不常用的冷知識,是時候來看看JavaScript中對象屬性有哪些有意思的東西了。 不出你所料,對象屬性自然也有其相應(yīng)的特征屬性,但是這個話題有點復(fù)雜...

    Richard_Gao 評論0 收藏0
  • JavaScript || 對象

    摘要:通過對返回字符串切片第位到倒數(shù)第位即可獲得對象的類型。測試對象是的深拷貝是的子集,不能表示中所有值。序列化結(jié)果是,對象序列化結(jié)果是日期字符串不能表示函數(shù)對象和只能序列化對象自有的可枚舉屬性。 對象 對象是JavaScript的基本數(shù)據(jù)類型:屬性的無序集合。每個屬性key: value和屬性描述符descripter組成。 屬性名key:字符串或合法的變量標識符; 屬性值value:...

    lavor 評論0 收藏0
  • JavaScript之對象屬性

    摘要:盡管的右操作數(shù)是構(gòu)造函數(shù),但計算過程實際是檢測了對象的繼承關(guān)系。通過創(chuàng)建的對象使用構(gòu)造函數(shù)的屬性作為它們的原型。 JavaScript之對象屬性 Object.create()繼承 ECMAScript 5定義了一個名為Object.create()的方法,它創(chuàng)建一個新對象, 其中第一個參數(shù)是這個對象的原型。Object.create()提供第二個可選參數(shù),用以對對象的屬性進行進一步描...

    gekylin 評論0 收藏0
  • 《JavaScript 闖關(guān)記》之對象

    摘要:屬性名可以是包含空字符串在內(nèi)的任意字符串,但對象中不能存在兩個同名的屬性。客戶端中表示網(wǎng)頁結(jié)構(gòu)的對象均是宿主對象。這里的函數(shù)稱做構(gòu)造函數(shù),構(gòu)造函數(shù)用以初始化一個新創(chuàng)建的對象。通過關(guān)鍵字和構(gòu)造函數(shù)調(diào)用創(chuàng)建的對象的原型就是構(gòu)造函數(shù)的屬性的值。 對象是 JavaScript 的數(shù)據(jù)類型。它將很多值(原始值或者其他對象)聚合在一起,可通過名字訪問這些值,因此我們可以把它看成是從字符串到值的映射...

    rozbo 評論0 收藏0
  • JavaScript-對象

    摘要:對象是什么在中,一個對象就像一個單獨擁有屬性和類型的實體。一個杯子作為一個對象,杯子有顏色重量等屬性。同樣,對象也有屬性定義它的特征。方法是關(guān)聯(lián)到某個對象的函數(shù),或者說,一個方法是一個值為某個函數(shù)的對象屬性。 對象是什么 在JavaScript中,一個對象就像一個單獨擁有屬性和類型的實體。一個杯子作為一個對象,杯子有顏色、重量等屬性。同樣,JavaScript對象也有屬性定義它的特征。...

    xeblog 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<