面向对象的程序设计——理解对象
面向對象的程序設計
ECMA-262 把對象定義為:無須屬性的集合,其屬性可以包含基本值、對象或者函數。
理解對象
var person = new Object(); //創建對象 person.name = "Nicholas"; //添加屬性 person.age = 29; person.job = "teacher"; person.sayName = function(){ //添加方法,this 表示當前作用域下的對象;this 表示new Objecy() 實例化出來的那個對象;this 要放在一個作用域下,比如person.sayName()是person 下的方法,方法可用this 表示方法本身。alert(this.name); }; 復制代碼屬性類型
ECMAScript 中有兩種屬性:數據屬性和訪問器屬性,它們不能在JavaScript 中直接訪問,規范把它們放在了兩對[[]]中間,如:[[Enumerable]]。
數據屬性 數據屬性是包含一個數據值的屬性,在這個位置可以讀取和寫入值。4個特性 [[Configurable]]:表示能否通過delete刪除屬性、能否修改屬性的特性,能否把屬性修改為訪問器屬性。默認true。 [[Enumerable]:表示能通過for-in循環返回屬性。默認true。 [[Writable]]:表示能否修改屬性值。默認true。 [[Value]]:包含這個屬性的數據值。默認undefined。 例:
var person = {name: "Nicholas" //[[Value]]的特性將這里設置為"Nicholas",對這個值的任何修改都講反應在這里。 }; 復制代碼要修改默認特性,要使用Object.defineProperty()方法。接收三個參數:屬性所在的對象,屬性的名字和一個描述符對象。描述符對象必須是configurable,enumerable,writable,value。 例:
var person = {}; Object.defineProperty(person,"name",{ //person:屬性所在的對象;name:屬性名;花括號內是描述符對象writable: false, //只讀模式,true寫入模式value: "Nicholas" }); person.name = "zhangsan"; alert(person.name); //打印"Nicholas" 因為這邊是只讀模式 復制代碼在調用Object.defineProperty()時如果不指定configurable,enumerable,writable,默認都是false。
訪問器屬性 訪問器屬性不包含數據值,它們包含一對getter和setter函數。 getter:讀取訪問器屬性調用 setter:寫入訪問器屬性調用 4個特性: [[Configurable]]:表示能否通過delete刪除屬性、能否修改屬性的特性,能否把屬性修改為訪問器屬性。默認true。 [[Enumerable]:表示能通過for-in循環返回屬性。默認true。 [[getter]]:讀取訪問器屬性調用,默認undefined。 [[setter]]:寫入訪問器屬性調用,默認undefined。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的面向对象的程序设计——理解对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot2自定义HttpTr
- 下一篇: ssm 使用中的一些问题