摘要:返回值是一個對象,如果是訪問器屬性,這個對象的屬性有和如果是數(shù)據(jù)屬性,這個對象的屬性有和。上一篇面向?qū)ο蟀鎵K之對象屬性下一篇面向?qū)ο蟀鎵K之創(chuàng)建對象
這是 javascript 面向?qū)ο蟀鎵K的第三篇文章,主要講解的是多個屬性的定義以及讀取屬性的特性。前面這幾章內(nèi)容目的在于加深對對象的理解,這樣可以利于理解后面的原型鏈以及繼承方面的知識,或者你也可以了解一下不一樣的 javascript 對象屬性的定義。
定義多個屬性在上一篇博客中已經(jīng)講解了定義一個屬性的方法,那就是 Object.defineProperty,那么在日常開發(fā)中如果要定義多個屬性呢,該使用什么樣的方法,其實可以聯(lián)想到使用 Object.defineProperties,對,就是這個方法,ECMAScript 5 定義了 Object.defineProperties() 方法,利用這個方法可以通過描述符一次定義多個屬性。這個方法接收兩個對象參數(shù):第一個對象是要添加和修改其屬性的對象,第二個對象的屬性與第一個對象中要添加或修改的屬性一一對應(yīng)。例如:
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)建的。
一樣的,在調(diào)用 Object.defineProperties() 方法時,如果不指定, configurable 、 enumerable 和writable 特性的默認值都是 false 。讀取屬性的特性
對于讀取屬性的特性可以使用 Object.getOwnPropertyDescriptor()方法,這個方法接收兩個參數(shù):屬性所在的對象和要讀取其描述符的屬性名稱。返回值是一個對象,如果是訪問器屬性,這個對象的屬性有 configurable 、 enumerable 、 get 和 set ;如果是數(shù)據(jù)屬性,這個對象的屬性有 configurable 、 enumerable 、 writable 和 value 。例如:
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://systransis.cn/yun/93186.html
摘要:上一篇面向?qū)ο蟀鎵K之理解對象下一篇面向?qū)ο蟀鎵K之定義多個對象屬性以及讀取屬性特性 這是 javascript 面向?qū)ο蟀鎵K的第二篇文章,主要講解的是對象的屬性,首先創(chuàng)建一個對象: var person = { name: Nicholas, age: 29, job: Software Engineer, sayName: function () { conso...
摘要:用代碼可以這樣描述安全到達國外面向過程既然說了面向?qū)ο?,那么與之對應(yīng)的就是面向過程。小結(jié)在這篇文章中,介紹了什么是面向?qū)ο蠛兔嫦蜻^程,以及中對象的含義。 這是 javascript 面向?qū)ο蟀鎵K的第一篇文章,主要講解對面向?qū)ο笏枷氲囊粋€理解。先說說什么是對象,其實這個還真的不好說。我們可以把自己當(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...
摘要:表示能否修改屬性的值。對于直接在對象上定義的屬性,這個特性的默認值為。默認值為設(shè)置一個屬性的值會導(dǎo)致其他屬性的變化如果的有值,就不要對再設(shè)置屬性所在的對象要讀取其描述符的屬性名稱 對象定義 對象定義:無序?qū)傩缘募?,其屬性可以包含基本值、對象或函?shù) 對象就是 鍵值對 其中值可以是數(shù)據(jù)和函數(shù) 對象方法就是對象的屬性 不過這個屬性是函數(shù) var p = new Object() p....
閱讀 1219·2021-11-22 12:05
閱讀 1344·2021-09-29 09:35
閱讀 640·2019-08-30 15:55
閱讀 3135·2019-08-30 14:12
閱讀 961·2019-08-30 14:11
閱讀 2882·2019-08-30 13:10
閱讀 2411·2019-08-29 16:33
閱讀 3338·2019-08-29 11:02