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