摘要:把對象定義為無序?qū)傩缘募希鋵傩钥梢园局祵ο蠡蚝瘮?shù)。接受兩個參數(shù)屬性所在的對象和要讀取其特性的屬性名返回的時其特性的對象例如讀高級程序設(shè)計這本書的第章面向?qū)ο蟮某绦蛟O(shè)計,我做了篇筆記。這是第一篇,后面還有兩篇,分別是封裝類和繼承。
ECMA-262把對象定義為:無序?qū)傩缘募希鋵傩钥梢园局怠ο蠡蚝瘮?shù)。所以,我們可以理解對象就是名值對的集合,名就是對象的每個屬性的名字,而每個名字都映射到一個值。
創(chuàng)建對象創(chuàng)建對象有兩種方式:
方式一
var person=new Object(); person.name=“Jone”; person.age=20; person.job=“Software Engineer”; person.sayName=function(){ alert(this.name); };
方式二
var person={ name:”Jone”, age:20, job:“Software Engineer”, sayName:function(){ alert(this.name); } };
這兩種方式創(chuàng)建的對象都是一樣的。也可以靈活的混合使用,但要記住var person=new Object()和
var person={ name:”Jone”, age:20, job:“Software Engineer”, sayName:function(){ alert(this.name); } }
都是在為person賦值,不可重復(fù)賦值,如果重復(fù)使用就相當(dāng)于前面的值放棄,使用后來重新賦的值。或者說都是在給person指向了一個新的地址,地址里存著新的對象。person確定是一個引用類型了,就可以在任意的地方用點來為它添加屬性和訪問屬性,例如:person.sex=“女”。person用點訪問時不會再為person更改指向地址,更改的是地址里存著的對象。
對象屬性的特性對象的屬性可以分為兩種屬性:數(shù)據(jù)屬性,訪問器屬性。兩種類型的屬性有各自的特性。
數(shù)據(jù)屬性:
[[configurable]]:表示能否通過delete刪除屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。 [[enumerable]]:表示能否通過for-in循環(huán)返回屬性。 [[writable]]:表示能否修改屬性的值。 [[value]]:包含這個屬性的數(shù)據(jù)值。讀取屬性值的時候,從這個位置讀取;寫入屬性值的時候,把新值保存在這個位置。這個特性的默認值是undefined。 像上面的例子那樣直接在對象上定義的屬性,它們的configurable、enumerable、writable這些特性默認值為true。
訪問器屬性:
[[configurable]]:表示能否通過delete刪除屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。 [[enumerable]]:表示能否通過for-in循環(huán)返回屬性。 [[get]]:在讀取屬性時調(diào)用的函數(shù)。默認值是undefined [[set]]:在寫入屬性時調(diào)用的函數(shù)。默認值是undefined 像上面的例子那樣直接在對象上定義的屬性,它們的configurable、enumerable這些特性默認值為true。
訪問器屬性的使用方式即:設(shè)置一個屬性的值會導(dǎo)致其他屬性發(fā)生變化。
訪問器屬性的get、set特性不能直接定義,而是使用Object.defineProperty()來定義,屬性的get、set特性和writable、value特性不能同時存在。
特性的訪問方法:
Object.defineProperty()
例如:
var book={}; Object.defineProperty(book,”year”,{ configurable:true, value:2004 }); Object.defineProperty(person,”_year”,{ configurable:true, get:function(){ return this.year; }, set:function(newValue){ if(newValue>2004){ this.year=newValue; } } });
創(chuàng)建一個新屬性,或修改一個屬性的特性。創(chuàng)建一個新屬性時,如果不指定,configurable、enumerable、writable默認值都為false。configurable一旦被設(shè)置為false,就不能再把它變回true了,此時,再調(diào)用Object.defineProperty()修改除writable之外的特性都會報錯。
Object.defineProperties()
可以一次性定義多個屬性。
var book={}; Object.defineProperties(book,{ year:{ configurable:true, value:2004 }, _year:{ configurable:true, get:function(){ return this.year; }, set:function(newValue){ if(newValue>2004){ this.year=newValue; } } } });
Object.getOwnPropertyDescriptor()
用來讀取屬性的特性。接受兩個參數(shù):屬性所在的對象和要讀取其特性的屬性名,返回的時其特性的對象
例如:
var descriptor=Object.getOwnPropertyDescriptor(book,”year”); alert(descriptor.value);//2004 alert(descriptor.configurable);//true
讀《javaScript高級程序設(shè)計》這本書的第6章面向?qū)ο蟮某绦蛟O(shè)計,我做了3篇筆記。這是第一篇,后面還有兩篇,分別是封裝類和繼承。
以前一直認為真正理解了一個問題,你就能把它講清楚,講清楚了再把它寫清楚就容易了,現(xiàn)在發(fā)現(xiàn)要寫清楚真的太難了,要斟酌每句話都不是廢話,沒有歧義,盡量用少的字句等等。廢話了好久也不知道寫清楚了嗎。
如果哪里有問題歡迎指出。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89283.html
摘要:此時的原型對象包括一個指向另一個原型的指針,相應(yīng)的,另一個原型中的指向另一個構(gòu)造函數(shù)。這種關(guān)系層層遞進,就通過一個原型對象鏈接另一個構(gòu)造函數(shù)的原型對象的方式實現(xiàn)了繼承。 讀這篇之前,最好是已讀過我前面的關(guān)于對象的理解和封裝類的筆記。第6章我一共寫了3篇總結(jié),下面是相關(guān)鏈接:讀《javaScript高級程序設(shè)計-第6章》之理解對象讀《javaScript高級程序設(shè)計-第6章》之封裝類 一...
摘要:創(chuàng)建構(gòu)造函數(shù)后,其原型對象默認只會取得屬性至于其他的方法都是從繼承來的。上圖展示了構(gòu)造函數(shù)的原型對象和現(xiàn)有的兩個實例之間的關(guān)系。所有原生的引用類型都在其構(gòu)造函數(shù)的原型上定義了方法。 第6章我一共寫了3篇總結(jié),下面是相關(guān)鏈接:讀《javaScript高級程序設(shè)計-第6章》之理解對象讀《javaScript高級程序設(shè)計-第6章》之繼承 工廠模式 所謂的工廠模式就是,把創(chuàng)建具體對象的過程抽象...
摘要:題外話最近在看高級程序設(shè)計這本書,面對著多頁的厚書籍,心里有點壓力,所以我決定梳理一下。。全局環(huán)境的關(guān)閉是頁面關(guān)閉或者瀏覽器關(guān)閉,而局部環(huán)境的關(guān)閉是指函數(shù)結(jié)束。數(shù)值范圍最大和最小的范圍是超出范圍的數(shù)字如何表示是一個特殊的值。 題外話 最近在看《JavaScript高級程序設(shè)計》這本書,面對著700多頁的厚書籍,心里有點壓力,所以我決定梳理一下。。探究一下到底怎么讀這本書。本書的內(nèi)容好像...
摘要:題外話最近在看高級程序設(shè)計這本書,面對著多頁的厚書籍,心里有點壓力,所以我決定梳理一下。。全局環(huán)境的關(guān)閉是頁面關(guān)閉或者瀏覽器關(guān)閉,而局部環(huán)境的關(guān)閉是指函數(shù)結(jié)束。數(shù)值范圍最大和最小的范圍是超出范圍的數(shù)字如何表示是一個特殊的值。 題外話 最近在看《JavaScript高級程序設(shè)計》這本書,面對著700多頁的厚書籍,心里有點壓力,所以我決定梳理一下。。探究一下到底怎么讀這本書。本書的內(nèi)容好像...
摘要:題外話最近在看高級程序設(shè)計這本書,面對著多頁的厚書籍,心里有點壓力,所以我決定梳理一下。。全局環(huán)境的關(guān)閉是頁面關(guān)閉或者瀏覽器關(guān)閉,而局部環(huán)境的關(guān)閉是指函數(shù)結(jié)束。數(shù)值范圍最大和最小的范圍是超出范圍的數(shù)字如何表示是一個特殊的值。 題外話 最近在看《JavaScript高級程序設(shè)計》這本書,面對著700多頁的厚書籍,心里有點壓力,所以我決定梳理一下。。探究一下到底怎么讀這本書。本書的內(nèi)容好像...
閱讀 2737·2021-11-22 15:22
閱讀 1649·2021-11-22 14:56
閱讀 3626·2021-09-22 15:12
閱讀 2414·2021-09-02 15:41
閱讀 2133·2021-08-27 16:26
閱讀 1122·2019-08-30 15:55
閱讀 2150·2019-08-29 17:30
閱讀 675·2019-08-29 16:26