前言
不管是哪門語言,千變?nèi)f化不離其宗,深入理解其本質(zhì),方能應(yīng)用自如。對應(yīng)到j(luò)s,閉包,原型,函數(shù),對象等是需要花費(fèi)大功夫思考、理解的。
這一次我們來說一說在JavaScript中經(jīng)常會用到的一個復(fù)雜基本類型,對象,先從對象的屬性講起,再講對象的創(chuàng)建方法,基本涵蓋了創(chuàng)建對象的各種方法,大家一起學(xué)習(xí)呀~
一、對象
要掌握對象的使用及繼承,首先當(dāng)然需要先理解它,接下來,將會對對象的屬性類型進(jìn)行一個整理
1、什么是對象
對象其實是無序?qū)傩缘募希鋵傩钥梢园局担瑢ο蠡蛘吆瘮?shù),比如像下面這個例子就是一個person對象啦
var person = { name: "NIcholas", age: 29, sayName: function() { console.log(this.name); }}從上面的例子我們可以看到,對象可以是由屬性和其相應(yīng)的值構(gòu)成,對象中可以包含函數(shù),也可以包含其它對象
2、屬性類型
在JavaScript中,其實有兩種屬性,包括數(shù)據(jù)屬性和訪問器屬性
(1)數(shù)據(jù)屬性
數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置,在這個位置可以讀取和寫入值,一般來說,有4個描述其行為的特性:
a、[[Configurable]]:表示能否通過delete刪除屬性從而重新定義屬性,默認(rèn)值為true
b、[[Enumerable]]:表示能否通過for-in循環(huán)返回屬性,默認(rèn)值為true
c、[[Writable]]:表示能否修改屬性的值,默認(rèn)值為true
d、[[Value]]:包含這個屬性的數(shù)據(jù)值,默認(rèn)值為undefined
一般來說,數(shù)據(jù)屬性都有自己的默認(rèn)值,那么如果我們要修改數(shù)據(jù)屬性默認(rèn)的特性,應(yīng)該怎么辦呢?這個時候就需要用到Object,defineProperty()方法啦,這個方法接收三個參數(shù):屬性所在的對象,屬性的名字和一個描述對象,來看下面的例子
var person = {};Object.defineProperty(person, "name", { writable: false, value: "Nicholas"});console.log(person.name); // Nicholas// 重新賦值person.name = "Greg";console.log(person.name); // Nicholas從上面的例子我們可以看到,因為設(shè)置了person對象的name屬性為不可修改,因此無論你在后面怎么修改person的name屬性的值,name屬性的值都不會發(fā)生改變
(2)訪問器屬性
訪問器屬性不包含數(shù)據(jù)值,它們包含一對兒getter和setter函數(shù),在讀取訪問器屬性時,會調(diào)用getter函數(shù),這個函數(shù)負(fù)責(zé)返回有效的值,在寫入訪問器屬性時,會調(diào)用setter函數(shù)并傳入新值,這個函數(shù)負(fù)責(zé)決定如何處理數(shù)據(jù),訪問器屬性有以下4個特性
新聞熱點(diǎn)
疑難解答
圖片精選