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