摘要:返回值是一個對象,如果是訪問器屬性,這個對象的屬性有和如果是數(shù)據(jù)屬性,這個對象的屬性有和。上一篇面向?qū)ο蟀鎵K之對象屬性下一篇面向?qū)ο蟀鎵K之創(chuàng)建對象
這是 javascript 面向?qū)ο蟀鎵K的第三篇文章,主要講解的是多個屬性的定義以及讀取屬性的特性。前面這幾章內(nèi)容目的在于加深對對象的理解,這樣可以利于理解后面的原型鏈以及繼承方面的知識,或者你也可以了解一下不一樣的 javascript 對象屬性的定義。
定義多個屬性在上一篇博客中已經(jīng)講解了定義一個屬性的方法,那就是 Object.defineProperty,那么在日常開發(fā)中如果要定義多個屬性呢,該使用什么樣的方法,其實(shí)可以聯(lián)想到使用 Object.defineProperties,對,就是這個方法,ECMAScript 5 定義了 Object.defineProperties() 方法,利用這個方法可以通過描述符一次定義多個屬性。這個方法接收兩個對象參數(shù):第一個對象是要添加和修改其屬性的對象,第二個對象的屬性與第一個對象中要添加或修改的屬性一一對應(yīng)。例如:
</>復(fù)制代碼
var book = {};
Object.defineProperties(book, {
_year: {
value: 2017
},
edition: {
value: 1,
writable: true,
},
year: {
get: function () {
return this._year;
},
set: function (newVal) {
if (newVal > this._year) {
this.edition += newVal - this._year;
}
}
}
})
book.year = 2018;
console.log(book.edition); // 2
以上代碼在 book 對象上定義了兩個數(shù)據(jù)屬性( _year 和 edition )和一個訪問器屬性( year ),這里的屬性都是在同一時間創(chuàng)建的。
</>復(fù)制代碼
一樣的,在調(diào)用 Object.defineProperties() 方法時,如果不指定, configurable 、 enumerable 和writable 特性的默認(rèn)值都是 false 。
讀取屬性的特性
對于讀取屬性的特性可以使用 Object.getOwnPropertyDescriptor()方法,這個方法接收兩個參數(shù):屬性所在的對象和要讀取其描述符的屬性名稱。返回值是一個對象,如果是訪問器屬性,這個對象的屬性有 configurable 、 enumerable 、 get 和 set ;如果是數(shù)據(jù)屬性,這個對象的屬性有 configurable 、 enumerable 、 writable 和 value 。例如:
</>復(fù)制代碼
var book = {};
Object.defineProperties(book, {
_year: {
value: 2017
},
edition: {
value: 1,
writable: true,
},
year: {
get: function () {
return this._year;
},
set: function (newVal) {
if (newVal > this._year) {
this.edition += newVal - this._year;
}
}
}
})
var descriptor1 = Object.getOwnPropertyDescriptor(book, "_year");
console.log(descriptor1.value); // 2017
console.log(descriptor1.configurable); // false
console.log(typeof descriptor1.get); // undefined
var descriptor2 = Object.getOwnPropertyDescriptor(book, "edition");
console.log(descriptor2.value); // 1
console.log(descriptor2.configurable); // false
console.log(descriptor2.writable); // true
var descriptor3 = Object.getOwnPropertyDescriptor(book, "year");
console.log(typeof descriptor3.value); // undefined
console.log(descriptor3.enumerable); // false
console.log(typeof descriptor3.get); // function
console.log(typeof descriptor3.set); // function
對于數(shù)據(jù)屬性 _year , value 等于最初的值, configurable 是 false ,而 get 等于 undefined 。對于訪問器屬性 year , value 等于 undefined , enumerable 是 false ,而 get 是一個指向 getter 函數(shù)的指針。
小結(jié)這篇文章主要講解了定義多個屬性和讀取屬性的特性,分別使用了 Object.defineProperties() 和Object.getOwnPropertyDescriptor()方法,了解了這種定義屬性和讀取屬性的方法之后,相信你對于對象會有更加深刻地理解。
上一篇:javascript 面向?qū)ο蟀鎵K之對象屬性
下一篇:javascript 面向?qū)ο蟀鎵K之創(chuàng)建對象
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93186.html
摘要:上一篇面向?qū)ο蟀鎵K之理解對象下一篇面向?qū)ο蟀鎵K之定義多個對象屬性以及讀取屬性特性 這是 javascript 面向?qū)ο蟀鎵K的第二篇文章,主要講解的是對象的屬性,首先創(chuàng)建一個對象: var person = { name: Nicholas, age: 29, job: Software Engineer, sayName: function () { conso...
摘要:用代碼可以這樣描述安全到達(dá)國外面向過程既然說了面向?qū)ο?,那么與之對應(yīng)的就是面向過程。小結(jié)在這篇文章中,介紹了什么是面向?qū)ο蠛兔嫦蜻^程,以及中對象的含義。 這是 javascript 面向?qū)ο蟀鎵K的第一篇文章,主要講解對面向?qū)ο笏枷氲囊粋€理解。先說說什么是對象,其實(shí)這個還真的不好說。我們可以把自己當(dāng)成一個對象,或者過年的時候相親,找對象,那么你未來的老婆也是一個對象。我們就要一些屬性,比...
摘要:之面向?qū)ο罂偨Y(jié)前言在中是沒有類的概念的,所以它的對象與基于類的語言中的對象不同。一理解對象張三上面通過構(gòu)造函數(shù)創(chuàng)建了一個對象,并為它添加了三個屬性。 JavaScript之面向?qū)ο罂偨Y(jié) 前言:在ECMAScript中是沒有類的概念的,所以它的對象與基于類的語言中的對象不同。ECMA-262把對象總結(jié)為:無序?qū)傩缘募?,其屬性包含基本值、對象或者函?shù)。 一、理解對象 var person...
摘要:今天結(jié)合高編第六章開始回顧和深入學(xué)習(xí)面向?qū)ο蟛糠职▽ο笤驮玩溊^承等部分。二對象的屬性類型勾鑫宇,數(shù)據(jù)屬性訪問器屬性書上講到屬性類型時,只是簡單提了一下是為了表示對象的特性,描述了屬性的特征,并且在中不能直接訪問。 前言 JavaScript發(fā)明之始,從技術(shù)上來講就是一門面向?qū)ο蟮恼Z言,但在ES6之前,JS的很多特性和傳統(tǒng)的面向?qū)ο笳Z言有所不同,比如沒有類的概念(ES6有了clas...
摘要:表示能否修改屬性的值。對于直接在對象上定義的屬性,這個特性的默認(rèn)值為。默認(rèn)值為設(shè)置一個屬性的值會導(dǎo)致其他屬性的變化如果的有值,就不要對再設(shè)置屬性所在的對象要讀取其描述符的屬性名稱 對象定義 對象定義:無序?qū)傩缘募?,其屬性可以包含基本值、對象或函?shù) 對象就是 鍵值對 其中值可以是數(shù)據(jù)和函數(shù) 對象方法就是對象的屬性 不過這個屬性是函數(shù) var p = new Object() p....
閱讀 1220·2021-11-22 12:05
閱讀 1345·2021-09-29 09:35
閱讀 642·2019-08-30 15:55
閱讀 3136·2019-08-30 14:12
閱讀 962·2019-08-30 14:11
閱讀 2883·2019-08-30 13:10
閱讀 2411·2019-08-29 16:33
閱讀 3339·2019-08-29 11:02
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要