国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

學(xué)習(xí)javascript面向?qū)ο?理解javascript對(duì)象

2019-11-20 10:52:22
字體:
供稿:網(wǎng)友

一、編程思想
面向過程:以過程為中心,自頂向下逐步細(xì)化,程序看成一系列函數(shù)調(diào)用的集合
面向?qū)ο?對(duì)象作為程序的基本單元,程序分解為數(shù)據(jù)和相關(guān)操作
二、類、對(duì)象
類:對(duì)具有相同特性和特征事物的抽象描述
對(duì)象:某種類型對(duì)應(yīng)的具體事物
三、面向?qū)ο蟮娜筇匦?/strong>
封裝:隱藏實(shí)現(xiàn)細(xì)節(jié),實(shí)現(xiàn)代碼模塊化
繼承:擴(kuò)展已存在的代碼模塊,實(shí)現(xiàn)代碼重用 
多態(tài):接口的不同實(shí)現(xiàn)方式,實(shí)現(xiàn)接口重用
四、對(duì)象定義:無序?qū)傩缘募希鋵傩钥梢园局怠?duì)象或者函數(shù)

//簡(jiǎn)單的對(duì)象實(shí)例var person = new Object();  person.name = "Nicholas";  person.age = 29;  person.job = "Software Engineer";  person.sayName = function(){    alert(this.name);  }

五、內(nèi)部屬性類型:內(nèi)部屬性無法直接訪問,ECMAScript5把它們放在兩對(duì)方括號(hào)中,分為數(shù)據(jù)屬性和訪問器屬性
[1]數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置,在這個(gè)位置可以讀取和寫入值。數(shù)據(jù)屬性有4個(gè)特性:
    a、[[Configurable]]: 表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性,直接在對(duì)象上定義的屬性,默認(rèn)值為true
    b、[[Enumerable]]: 表示能否通過for-in循環(huán)返回屬性,直接在對(duì)象上定義的屬性,默認(rèn)值為true
    c、[[Writable]]: 表示能否修改屬性的值,直接在對(duì)象上定義的屬性,默認(rèn)值為true
    d、[[Value]]: 包含這個(gè)屬性的數(shù)據(jù)值,讀取屬性值的時(shí)候,從這個(gè)位置讀;寫入屬性值的時(shí)候,把新值保存在這個(gè)位置。直接在對(duì)象上定義的屬性,默認(rèn)值為undefined
[2]訪問器屬性不包含數(shù)據(jù)值,包含一對(duì)getter和setter函數(shù)(不過這兩個(gè)函數(shù)不是必需的)。讀取訪問器屬性時(shí),會(huì)調(diào)用getter函數(shù),這個(gè)函數(shù)負(fù)責(zé)返回有效的值;在寫入訪問器屬性時(shí),會(huì)調(diào)用setter函數(shù)并傳入新值,這個(gè)函數(shù)負(fù)責(zé)決定如何處理函數(shù)。訪問器屬性有如下4個(gè)特性:
    a、[[Configurable]]: 表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。直接在對(duì)象上定義的屬性,默認(rèn)值為true
    b、[[Enumerable]]: 表示能否通過for-in循環(huán)返回屬性,直接在對(duì)象上定義的屬性,默認(rèn)值為true
    c、[[Get]]: 在讀取屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值為undefined
    d、[[Set]]: 在寫入屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值為undefined
六、修改內(nèi)部屬性:使用ECMAScript5的object.defineProperty()方法,該方法接收三個(gè)參數(shù):屬性所在的對(duì)象、屬性的名字和一個(gè)描述符對(duì)象
  [注意1]IE8是第一個(gè)實(shí)現(xiàn)Object.defineProperty()方法的瀏覽器版本。然而,這個(gè)版本的實(shí)現(xiàn)存在諸多限制:只能在DOM對(duì)象上使用這個(gè)方法,而且只能創(chuàng)建訪問器屬性。由于實(shí)現(xiàn)不徹底,不建議在IE8中使用Object.defineProperty()方法
  [注意2]不支持Object.defineProperty()方法的瀏覽器中不能修改[[Configurable]]和[[Enumerable]]
[1]修改數(shù)據(jù)屬性

//直接在對(duì)象上定義的屬性,Configurable、Enumerable、Writable為truevar person = {  name:'cook'};Object.defineProperty(person,'name',{  value: 'Nicholas'});alert(person.name);//'Nicholas'person.name = 'Greg';alert(person.name);//'Greg'  
//不是在對(duì)象上定義的屬性,Configurable、Enumerable、Writable為falsevar person = {};Object.defineProperty(person,'name',{  value: 'Nicholas'});alert(person.name);//'Nicholas'person.name = 'Greg';alert(person.name);//'Nicholas'
//該例子中設(shè)置writable為false,則屬性值無法被修改var person = {};Object.defineProperty(person,'name',{  writable: false,  value: 'Nicholas'});alert(person.name);//'Nicholas'person.name = 'Greg';alert(person.name);//'Nicholas'  
//該例子中設(shè)置configurable為false,則屬性不可配置var person = {};Object.defineProperty(person,'name',{  configurable: false,  value: 'Nicholas'});alert(person.name);//'Nichols'delete person.name;alert(person.name);//'Nicholas'

[注意]一旦把屬性定義為不可配置的,就不能再把它變回可配置了,也就是說可以多次調(diào)用Object.defineProperty()修改同一屬性,但在把configurable設(shè)置為false之后,就有限制了

var person = {};Object.defineProperty(person,'name',{  configurable: false,  value: 'Nicholas'});//會(huì)報(bào)錯(cuò)Object.defineProperty(person,'name',{  configurable: true,  value: 'Nicholas'});

[2]修改訪問器屬性

//簡(jiǎn)單的修改訪問器屬性的例子var book = {  _year: 2004,  edition: 1};Object.defineProperty(book,'year',{  get: function(){    return this._year;},  set: function(newValue){    if(newValue > 2004){      this._year = newValue;      this.edition += newValue - 2004;    }  }});book.year = 2005;alert(book.year)//2005alert(book.edition);//2

[注意1]只指定getter意味著屬性是不能寫

var book = {  _year: 2004,  edition: 1};Object.defineProperty(book,'year',{  get: function(){    return this._year;  },});book.year = 2005;alert(book.year)//2004  

[注意2]只指定setter意味著屬性不能讀

var book = {  _year: 2004,  edition: 1};Object.defineProperty(book,'year',{  set: function(newValue){    if(newValue > 2004){      this._year = newValue;      this.edition += newValue - 2004;    }  }});book.year = 2005;alert(book.year);//undefined

【補(bǔ)充】創(chuàng)建訪問器屬性的用兩個(gè)非標(biāo)準(zhǔn)的方法:__defineGetter__()和__defineSetter__()

var book = {  _year: 2004,  edition: 1};//定義訪問器的舊有方法book.__defineGetter__('year',function(){  return this._year;});book.__defineSetter__('year',function(newValue){  if(newValue > 2004){    this._year = newValue;    this.edition += newValue - 2004;  }});book.year = 2005;alert(book.year);//2005alert(book.edition);//2

七、定義多個(gè)屬性:ECMAScript5定義了一個(gè)Object.defineProperties()方法,利用這個(gè)方法可以通過描述符一次定義多個(gè)屬性,這個(gè)方法接收兩個(gè)對(duì)象參數(shù):第一個(gè)對(duì)象是要添加和修改其屬性的對(duì)象,第二個(gè)對(duì)象的屬性與第一個(gè)對(duì)象要添加或修改的一一對(duì)應(yīng)

var book = {};Object.defineProperties(book,{  _year: {    value: 2004  },  edition: {    value: 1  },  year: {    get: function(){      return this._year;    },    set: function(newValue){      if(newValue > 2004){        this._year = newValue;        this.edition += newValue - 2004;      }    }  }});

八、讀取屬性特性:使用ECMAScript5的Object.getOwnPropertyDescriptor()方法,可以取得給定屬性的描述符。該方法接收兩個(gè)參數(shù):屬性所在對(duì)象和要讀取其描述符的屬性名稱,返回值是一個(gè)對(duì)象。
[注意]可以針對(duì)任何對(duì)象――包括DOM和BOM對(duì)象,使用Object.getOwnPropertyDescriptor()方法

var book = {};Object.defineProperties(book,{  _year: {    value: 2004  },  edition: {    value: 1  },  year: {    get: function(){      return this._year;    },    set: function(newValue){      if(newValue > 2004){        this._year = newValue;        this.edition += newValue - 2004;      }    }  } });var descriptor = Object.getOwnPropertyDescriptor(book,'_year');alert(descriptor.value);//2004alert(descriptor.configurable);//falsealert(typeof descriptor.get);//'undefined'var descriptor = Object.getOwnPropertyDescriptor(book,'year');alert(descriptor.value);//'undefined'alert(descriptor.configurable);//falsealert(typeof descriptor.get);//'function'

以上就是關(guān)于javascript面向?qū)ο蟮脑敿?xì)內(nèi)容介紹,希望對(duì)大家的學(xué)習(xí)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武安市| 临夏市| 大石桥市| 错那县| 明溪县| 五河县| 深州市| 仲巴县| 新乡市| 青龙| 昂仁县| 连南| 德阳市| 分宜县| 民权县| 马公市| 富锦市| 天镇县| 绥棱县| 平原县| 长顺县| 兰西县| 含山县| 东安县| 宜章县| 虞城县| 玉山县| 通许县| 松阳县| 河西区| 吴堡县| 新和县| 呼和浩特市| 潮州市| 澎湖县| 基隆市| 民勤县| 墨江| 泸水县| 香港| 全南县|