亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

學習javascript面向對象 理解javascript對象

2019-11-20 10:52:22
字體:
來源:轉載
供稿:網友

一、編程思想
面向過程:以過程為中心,自頂向下逐步細化,程序看成一系列函數調用的集合
面向對象:對象作為程序的基本單元,程序分解為數據和相關操作
二、類、對象
類:對具有相同特性和特征事物的抽象描述
對象:某種類型對應的具體事物
三、面向對象的三大特性
封裝:隱藏實現細節,實現代碼模塊化
繼承:擴展已存在的代碼模塊,實現代碼重用 
多態:接口的不同實現方式,實現接口重用
四、對象定義:無序屬性的集合,其屬性可以包含基本值、對象或者函數

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

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

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

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

var person = {};Object.defineProperty(person,'name',{  configurable: false,  value: 'Nicholas'});//會報錯Object.defineProperty(person,'name',{  configurable: true,  value: 'Nicholas'});

[2]修改訪問器屬性

//簡單的修改訪問器屬性的例子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

【補充】創建訪問器屬性的用兩個非標準的方法:__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

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

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()方法,可以取得給定屬性的描述符。該方法接收兩個參數:屬性所在對象和要讀取其描述符的屬性名稱,返回值是一個對象。
[注意]可以針對任何對象――包括DOM和BOM對象,使用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'

以上就是關于javascript面向對象的詳細內容介紹,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品扒开腿做爽爽爽视频| 97视频在线观看网址| 欧美成年人网站| yw.139尤物在线精品视频| 国产成人精品日本亚洲| 91麻豆国产语对白在线观看| 在线观看久久久久久| 68精品国产免费久久久久久婷婷| 亚洲精品乱码久久久久久金桔影视| 国产精品久久久久久久久粉嫩av| 欧美中文字幕视频| 欧美黑人极品猛少妇色xxxxx| 国产精品极品美女在线观看免费| 久久视频在线播放| 国产精品免费一区二区三区都可以| 久久影院模特热| 久热精品视频在线免费观看| 欧美在线精品免播放器视频| 亚洲欧美日韩爽爽影院| 性欧美暴力猛交69hd| 亚洲欧美另类国产| 国产精品久久久久久久久久ktv| 尤物99国产成人精品视频| 91在线免费视频| 九九热这里只有精品免费看| 欧美激情免费在线| 国产婷婷97碰碰久久人人蜜臀| 国产精品高潮呻吟久久av黑人| 成人在线一区二区| 中文在线资源观看视频网站免费不卡| 国产精品小说在线| 尤物yw午夜国产精品视频| 欧美日韩在线免费观看| 亚洲午夜久久久久久久| 国产网站欧美日韩免费精品在线观看| 欧美日韩国产第一页| 国产精品久久二区| 亚洲日本成人网| 欧美国产一区二区三区| 中文字幕欧美专区| 精品亚洲精品福利线在观看| 国产91热爆ts人妖在线| 91中文在线观看| 精品亚洲夜色av98在线观看| 成人国内精品久久久久一区| 国产成人精品网站| 亚洲在线视频福利| 亚洲欧美国产日韩中文字幕| 亚洲日韩中文字幕在线播放| 久久国产一区二区三区| 亚洲国产欧美一区二区三区久久| 亚洲第一免费网站| 国产欧美精品在线播放| 欧美成年人在线观看| 韩国三级电影久久久久久| 欧美男插女视频| 亚洲精品在线91| 俺去亚洲欧洲欧美日韩| 国内精品美女av在线播放| 欧美国产日韩中文字幕在线| 亚洲色在线视频| 日韩电影中文字幕在线| 久久69精品久久久久久久电影好| 亚洲高清福利视频| 日韩欧美成人区| 国产精品久久视频| 国产精品久久久久不卡| 国产日韩av在线播放| 最新国产成人av网站网址麻豆| 欧美色道久久88综合亚洲精品| 2019最新中文字幕| 久久久女人电视剧免费播放下载| 欧美电影在线观看完整版| 6080yy精品一区二区三区| 亚洲一区二区三区毛片| 久久天天躁狠狠躁夜夜躁2014| 国产精品久久久久久久久| 久久精品这里热有精品| 亚洲精品乱码久久久久久按摩观| 国产欧美日韩最新| 粉嫩老牛aⅴ一区二区三区| 日韩网站免费观看高清| 亚洲跨种族黑人xxx| 久久综合亚洲社区| 久久久精品日本| 亚洲欧美第一页| 91午夜理伦私人影院| 日韩欧美一区二区三区| 日韩欧美亚洲国产一区| 亚洲大胆美女视频| 精品亚洲一区二区三区在线观看| 国产视频精品一区二区三区| 国产午夜精品一区二区三区| 国产精品免费福利| 欧美做爰性生交视频| 中文字幕在线看视频国产欧美在线看完整| 日韩av在线电影网| 国产精品av网站| 国产精品揄拍500视频| 国产一区二区三区在线视频| 91精品综合久久久久久五月天| 成人日韩在线电影| 成人国内精品久久久久一区| 亚洲午夜av久久乱码| 欧美性猛交xxxx乱大交| 国产精品无码专区在线观看| 中文字幕精品一区二区精品| 亚洲性69xxxbbb| 久久91精品国产91久久久| 亚洲精品国产精品乱码不99按摩| 欧美性理论片在线观看片免费| 98精品国产高清在线xxxx天堂| 九九热这里只有精品免费看| 午夜免费在线观看精品视频| 45www国产精品网站| 91夜夜揉人人捏人人添红杏| 成人黄色免费网站在线观看| 日本不卡视频在线播放| 尤物yw午夜国产精品视频| 日韩精品久久久久久福利| 国产精品一区二区三| 国内偷自视频区视频综合| 日韩美女视频中文字幕| 亚洲自拍偷拍在线| 中文日韩在线观看| 久久久国产精彩视频美女艺术照福利| 久久精品2019中文字幕| 国内精品国产三级国产在线专| 国产不卡精品视男人的天堂| 日日狠狠久久偷偷四色综合免费| 精品国产乱码久久久久久天美| 国产视频久久久| 欧美日韩精品中文字幕| 一色桃子一区二区| 久久精品国产精品亚洲| 亚洲成人免费网站| 中文字幕亚洲欧美一区二区三区| 亚洲精品黄网在线观看| 国产精品入口日韩视频大尺度| 在线视频亚洲欧美| 成人在线视频网站| 欧美成年人视频网站| 亚洲欧美日韩国产中文| 欧美激情精品久久久久久久变态| 一个人看的www欧美| 97超级碰碰人国产在线观看| 成人性生交大片免费观看嘿嘿视频| 97国产suv精品一区二区62| 不卡在线观看电视剧完整版| 91美女片黄在线观看游戏| 久久久综合免费视频| 国产精品日韩一区| 8x拔播拔播x8国产精品| 欧美成人免费全部| 丁香五六月婷婷久久激情| 热久久美女精品天天吊色| 久久精品人人做人人爽| 亚州精品天堂中文字幕| …久久精品99久久香蕉国产| 久久综合亚洲社区| 日韩欧美在线视频免费观看| 亚洲欧洲第一视频| 91精品久久久久久久久中文字幕| 日韩欧美亚洲国产一区|