WEB前端開發(fā)社區(qū) 2021-07-23
1.1 什么是對象?
對象是事物,在現(xiàn)實世界中,一個球,一張桌子,一輛汽車都是對象。
對象就是具有可描述特征的事物,我們可以用某種特定的方式去影響和操作它。
在JS中或者說在面向?qū)ο蟮木幊陶Z言中,對象是一系列屬性和方法的組合。
一個屬性包含屬性名和屬性值,這個值可以是任意類型的數(shù)據(jù),也可以是個函數(shù),這種情況下函數(shù)也被稱為方法。
而在JS中,你遇到的所有東西幾乎都是對象,那么我們來了解一下對象的細(xì)節(jié)。
1.2 對象的特征?
對象有屬性,也就是對象的特征,可以通過點(diǎn)符號來訪問一個對象的屬性。
objectName.propertyName;
如果把對象比作現(xiàn)實中的一個球,那這個球就是一個對象,擁有屬性,有顏色有大小。這些可以這樣表示:
var ball = new Object();ball.color = “red";ball.size = 12;
對象還有方法,方法用于定義對象的行為方式。
比如這個球可能有滾動的方法可以計算能滾多遠(yuǎn),有彈跳的方法可以計算跳多高。
可以這樣表示:
ball.roll = function() {return this.size * laps}
1.3 訪問對象的屬性
前面講過我們可以通過點(diǎn)符號來訪問對象的屬性,但如果是這樣的情況,還能通過點(diǎn)符號訪問對象的屬性嗎:
var ball = new Object();ball.color = “red";ball.size = 12;var spec = “color”;ball.spec ??
這里假設(shè)有一個變量spec,我們需要通過這個變量spec來訪問對象屬性。
但如果用點(diǎn)符號將會訪問ball的spec屬性然后返回一個undefined,說明這里直接將spec當(dāng)做了一個屬性而不是變量。
如果我們想要獲得變量的值,來作為對象的屬性那應(yīng)該怎么做呢?
可以使用方括號標(biāo)記訪問,這個標(biāo)記法在屬性名稱那里是動態(tài)判定的,這樣就可以通過存儲在變量中的字符串來訪問屬性了:
ball[spec]; // red
1.4 枚舉對象的屬性
另外我們可以通過for in循環(huán)語句來枚舉對象的所有屬性:
var ball = {color: “red”, size: 12, border: 2};for (var prop in ball) {console.log(“ball.” + prop + “=“ + obj[prop]);}// ball.color = red// ball.size = 12// ball.border = 2// 如果希望繼承的屬性不顯示,那么可以用hasOwnProperty函數(shù)來過濾一遍var bar = {a: 1, b: 2, c: 3};function Foo() {this.color = 'red';}Foo.prototype = bar;var obj = new Foo();for (var prop in obj) {if (obj.hasOwnProperty(prop)) {console.log(prop);}}
也可以通過Object.keys(obj)的方法來返回一個屬性名集合的數(shù)組:
var obj = {a: “123”, b: “das”, c: “web”};console.log(Object.keys(obj)); // [“a”,”b”,”c”];var arr = [“a”, “b”, “c”];console.log(Object.keys(arr)); // [“0”,”1”,”2”];