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