javascript對象

一、 JavaScript 對象定義

1、在 JavaScript 中,幾乎“所有事物”都是對象榨惠。

布爾是對象(如果用?new?關鍵詞定義)

數字是對象(如果用?new?關鍵詞定義)

字符串是對象(如果用?new?關鍵詞定義)

日期永遠都是對象

算術永遠都是對象

正則表達式永遠都是對象

數組永遠都是對象

函數永遠都是對象

對象永遠都是對象

所有 JavaScript 值,除了原始值盛霎,都是對象赠橙。

2、原始值和原始數據

原始值指的是沒有屬性或方法的值摩渺。

原始數據類型指的是擁有原始值的數據简烤。JavaScript 定義了 5 種原始數據類型:string剂邮、number摇幻、boolean、null挥萌、undefined

原始值是一成不變的(它們是硬編碼的绰姻,因此不能改變)。假設 x = 3.14引瀑,能夠改變 x 的值狂芋,但是無法改變 3.14 的值。

3憨栽、對象是包含變量的變量

JavaScript 變量能夠包含單個的值帜矾,但是對象能夠包含很多值。值按照名稱 : 值對的形式編寫(名稱和值以冒號分隔)屑柔。

如:var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};

JavaScript 對象是命名值的集合屡萤。

二、 JavaScript 對象屬性

JavaScript 對象是命名值的集合掸宛。JavaScript 對象中的命名值死陆,被稱為屬性。無序屬性唧瘾。屬性通炒胍耄可以被修改别凤、添加和刪除,但是某些屬性是只讀的领虹。

1规哪、訪問 JavaScript 屬性

訪問對象屬性的語法是:objectName.property? ? ? ? ? ? ?// person.age

或者:objectName["property"]? ? ? ? ? // person["age"]

或者:objectName[expression]? ? ? ? ?// x = "age"; person[x]

表達式必須計算為屬性名。

2塌衰、for...in 循環(huán)遍歷對象屬性

for (variableinobject) {要執(zhí)行的代碼}? ??

for...in?循環(huán)中的代碼塊會為每個屬性執(zhí)行一次由缆。

3、添加屬性

通過簡單的賦值向已存在的對象添加新屬性猾蒂。

person.nationality = "English";

4均唉、刪除屬性

delete?關鍵詞從對象中刪除屬性。delete person.age;

delete?關鍵詞會同時刪除屬性的值和屬性本身肚菠。刪除完成后舔箭,屬性在被添加回來之前是無法使用的。

delete?操作符被設計用于對象屬性蚊逢。它對變量或函數沒有影響层扶。

delete?操作符不應被用于預定義的 JavaScript 對象屬性,這樣做會使應用程序崩潰烙荷。

5镜会、屬性值

所有屬性都有名稱和值。

屬性的特性:值终抽、可列舉戳表、可配置、可寫昼伴。這些特性定義了屬性被訪問的方式(是可讀還是可寫)

在 JavaScript 中匾旭,所有屬性都是可讀的,但是只有值是可修改的(只有當屬性為可寫時)圃郊。

6价涝、原型屬性

JavaScript 對象繼承了它們的原型的屬性。

delete?關鍵詞不會刪除被繼承的屬性持舆,但是如果刪除了某個原型屬性色瘩,則將影響到所有從原型繼承的對象。

三逸寓、 JavaScript 對象方法

方法是可以在對象上執(zhí)行的動作居兆。對象屬性可以是原始值、其他對象以及函數席覆。對象方法是包含函數定義的對象屬性(即存儲為對象屬性的函數)史辙。

1、this?關鍵詞

在 JavaScript 中,被稱為?this?的事物聊倔,指的是擁有該 JavaScript 代碼的對象晦毙。

this?的值,在函數中使用時耙蔑,是“擁有”該函數的對象见妒。請注意?this?并非變量。它是關鍵詞甸陌。無法改變?this?的值须揣。

fullName : function() {? return this.firstName + " " + this.lastName;}

2、創(chuàng)建對象方法:

methodName: function() {代碼行}

3钱豁、訪問對象方法:

objectName.methodName()

屬性在被通過 () 調用后會以函數形式執(zhí)行耻卡。

4、使用對象的內建方法

var message = "Hello world!";

var x = message.toUpperCase();

5牲尺、添加新的方法

向對象添加方法是在構造器函數內部完成的

四卵酪、 JavaScript 對象訪問器

Getter 和 Setter 允許定義對象訪問器(被計算的屬性)。

1谤碳、JavaScript Getter(get 關鍵詞)

使用?lang?屬性來獲取?language?屬性的值

2溃卡、JavaScript Setter(set 關鍵詞)

使用?lang?屬性來設置?language?屬性的值

3、JavaScript 函數和 Getter的區(qū)別

函數以函數形式訪問 fullName:person.fullName()蜒简。

get關鍵詞以屬性形式訪問 fullName:person.fullName瘸羡。

Getter 和 Setter提供了更簡潔的語法,允許屬性和方法的語法相同搓茬,可以確保更好的數據質量犹赖,有利于后臺工作。

4垮兑、數據質量

使用 getter 和 setter 時冷尉,JavaScript 可以確保更好的數據質量漱挎。

五系枪、 JavaScript 對象構造器

1、對象類型(藍圖)(類)

有時需要創(chuàng)建相同“類型”的許多對象的“藍圖”磕谅。創(chuàng)建一種“對象類型”的方法私爷,是使用對象構造器函數

函數 Person()?就是對象構造器函數膊夹。

通過?new?關鍵詞調用構造器函數可以創(chuàng)建相同類型的對象:var myFather = new Person("Bill", "Gates", 62, "blue");

2衬浑、this?關鍵詞

this?的值,在對象中使用時放刨,就是對象本身工秩。在構造器函數中,this?是沒有值的。它是新對象的替代物助币。 當一個新對象被創(chuàng)建時浪听,this 的值會成為這個新對象。

3眉菱、添加對象屬性

myFather.nationality = "English";

4迹栓、添加對象方法

myFather.name = function () {? return this.firstName + " " + this.lastName;? };

5、為構造器添加屬性

無法直接為對象構造器添加新屬性俭缓,必須添加到構造器函數內部克伊,這樣對象屬性就可以擁有默認值。

6华坦、為構造器添加方法

無法直接為對象構造器添加新方法愿吹,必須添加到構造器函數內部。

My friend's last name is Jobs

7惜姐、內建 JavaScript 構造器

JavaScript 提供用于原始對象的構造器洗搂。

var x1 = new Object();// 一個新的 Object 對象。使用對象字面量?{}?代替

var x2 = new String();// 一個新的 String 對象载弄。使用字符串字面量?""?代替

var x3 = new Number();// 一個新的 Number 對象耘拇。使用數值字面量代替

var x4 = new Boolean();// 一個新的 Boolean 對象。使用布爾字面量代替

var x5 = new Array();// 一個新的 Array 對象宇攻。使用數組字面量?[]代替

var x6 = new RegExp();// 一個新的 RegExp 對象惫叛。使用模式字面量代替

var x7 = new Function();// 一個新的 Function 對象。使用函數表達式?() {}?代替

var x8 = new Date();// 一個新的 Date 對象

Math()?對象不再此列逞刷。Math 是全局對象嘉涌。new?關鍵詞不可用于 Math。

六夸浅、 JavaScript 對象原型

所有 JavaScript 對象都從原型繼承屬性和方法仑最。

日期對象繼承自 Date.prototype。數組對象繼承自 Array.prototype帆喇。Person 對象繼承自 Person.prototype……

Object.prototype 位于原型繼承鏈的頂端:日期對象警医、數組對象和 Person 對象都繼承自 Object.prototype。

1坯钦、向對象添加屬性和方法

向所有給定類型的已有對象添加新屬性(或方法)预皇。

向對象構造器添加新屬性(或方法)。

①使用?prototype?屬性

JavaScript prototype 屬性允許為對象構造器添加新屬性:

JavaScript prototype 屬性也允您為對象構造器添加新方法:

注意:請只修改自己的原型婉刀。絕不要修改標準 JavaScript 對象的原型吟温。

七、 JavaScript ES5 對象方法

1突颊、ES5 新的對象方法
Object.defineProperty(object, property, descriptor)鲁豪;// 添加或更改對象屬性

Object.defineProperties(object, descriptors)潘悼;// 添加或更改多個對象屬性

Object.getOwnPropertyDescriptor(object, property);// 訪問屬性

Object.getOwnPropertyNames(object)爬橡;// 以數組返回所有屬性

Object.keys(object)挥等;// 以數組返回所有可枚舉的屬性

Object.getPrototypeOf(object);// 訪問原型

Object.preventExtensions(object)堤尾;// 阻止向對象添加屬性

Object.isExtensible(object)肝劲;// 如果可將屬性添加到對象,則返回 true

Object.seal(object)郭宝;// 防止更改對象屬性(而不是值)

Object.isSealed(object)辞槐;// 如果對象被密封,則返回 true

Object.freeze(object)粘室;// 防止對對象進行任何更改

Object.isFrozen(object)榄檬;// 如果對象被凍結,則返回 true

2衔统、更改元數據

ES5 允許更改以下屬性元數據:

writable : true// 屬性值可修改

enumerable : true// 屬性可枚舉

configurable : true// 屬性可重新配置

writable : false// 屬性值不可修改

enumerable : false// 屬性不可枚舉

configurable : false// 屬性不可重新配置

? ? ? Object.defineProperty(person, "language", {writable:false}); //使語言為只讀

3鹿榜、ES5 允許更改 getter 和 setter:

get: function() { return language } // 定義 getter

set: function(value) { language = value }?// 定義 setter

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锦爵,隨后出現的幾起案子舱殿,更是在濱河造成了極大的恐慌,老刑警劉巖险掀,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪袭,死亡現場離奇詭異,居然都是意外死亡樟氢,警方通過查閱死者的電腦和手機冈绊,發(fā)現死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埠啃,“玉大人死宣,你說我怎么就攤上這事〔昕” “怎么了毅该?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叹螟。 經常有香客問我鹃骂,道長,這世上最難降的妖魔是什么罢绽? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮静盅,結果婚禮上良价,老公的妹妹穿的比我還像新娘寝殴。我一直安慰自己,他們只是感情好明垢,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布蚣常。 她就那樣靜靜地躺著,像睡著了一般痊银。 火紅的嫁衣襯著肌膚如雪抵蚊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天溯革,我揣著相機與錄音贞绳,去河邊找鬼。 笑死致稀,一個胖子當著我的面吹牛冈闭,可吹牛的內容都是我干的。 我是一名探鬼主播抖单,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼萎攒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起甸昏,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灶泵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后羹应,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡次屠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年园匹,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫灶。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡裸违,死狀恐怖,靈堂內的尸體忽然破棺而出本昏,到底是詐尸還是另有隱情供汛,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布涌穆,位于F島的核電站怔昨,受9級特大地震影響,放射性物質發(fā)生泄漏宿稀。R本人自食惡果不足惜趁舀,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祝沸。 院中可真熱鬧矮烹,春花似錦越庇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仁期,卻和暖如春桑驱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跛蛋。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工熬的, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人问芬。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓悦析,卻偏偏與公主長得像,于是被迫代替她去往敵國和親此衅。 傳聞我的和親對象是個殘疾皇子强戴,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容