js高級(jí)程序設(shè)計(jì)筆記2(面向?qū)ο螅?/h1>

一、理解對(duì)象

1. 數(shù)據(jù)屬性

數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。在這個(gè)位置可以讀取和寫入值。數(shù)據(jù)屬性有 4 個(gè)描述其行為的特性漂坏。

  • [[Configurable]]:表示能否通過 delete 刪除屬性從而重新定義屬性,能否修改屬性的特性媒至,或者能否把屬性修改為訪問器屬性顶别。像前面例子中那樣直接在對(duì)象上定義的屬性,它們的這個(gè)特性默認(rèn)值為 true拒啰。
  • [[Enumerable]]:表示能否通過 for-in 循環(huán)返回屬性驯绎。像前面例子中那樣直接在對(duì)象上定義的屬性,它們的這個(gè)特性默認(rèn)值為 true谋旦。
  • [[Writable]]:表示能否修改屬性的值剩失。像前面例子中那樣直接在對(duì)象上定義的屬性,它們的這個(gè)特性默認(rèn)值為 true册着。
  • [[Value]]:包含這個(gè)屬性的數(shù)據(jù)值拴孤。讀取屬性值的時(shí)候,從這個(gè)位置讀甲捏;寫入屬性值的時(shí)候演熟,把新值保存在這個(gè)位置。這個(gè)特性的默認(rèn)值為 undefined司顿。
var person = {};
Object.defineProperty(person, "name",
 {writable: false,value: "Nicholas"});
alert(person.name); //"Nicholas"
person.name = "Greg";
alert(person.name); //"Nicholas"  ```
注意:把 configurable 設(shè)置為 false芒粹,表示不能從對(duì)象中刪除屬性兄纺。如果對(duì)這個(gè)屬性調(diào)用 delete,則在非嚴(yán)格模式下什么也不會(huì)發(fā)生化漆,而在嚴(yán)格模式下會(huì)導(dǎo)致錯(cuò)誤估脆。而且,一旦把屬性定義為不可配置的获三,就不能再把它變回可配置了旁蔼。此時(shí)锨苏,再調(diào)用 Object.defineProperty()方法修改除 writable 之外的特性疙教,都會(huì)導(dǎo)致錯(cuò)誤 

##2、訪問器屬性 
-  [[Configurable]]:表示能否通過 delete 刪除屬性從而重新定義屬性伞租,能否修改屬性的特性贞谓,或者能否把屬性修改為數(shù)據(jù)屬性。對(duì)于直接在對(duì)象上定義的屬性葵诈,這個(gè)特性的默認(rèn)值為true裸弦。
-  [[Enumerable]]:表示能否通過 for-in 循環(huán)返回屬性悴侵。對(duì)于直接在對(duì)象上定義的屬性采章,這個(gè)特性的默認(rèn)值為 true。
-  [[Get]]:在讀取屬性時(shí)調(diào)用的函數(shù)烹植。默認(rèn)值為 undefined泞坦。? [[Set]]:在寫入屬性時(shí)調(diào)用的函數(shù)窖贤。默認(rèn)值為 undefined。 
```
//訪問器屬性不能直接定義贰锁,必須使用 Object.defineProperty()來定義赃梧。
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.edition); //2 ```
######注意:不一定非要同時(shí)指定 getter 和 setter。只指定 getter 意味著屬性是不能寫豌熄,嘗試寫入屬性會(huì)被忽略授嘀。在嚴(yán)格模式下,嘗試寫入只指定了 getter 函數(shù)的屬性會(huì)拋出錯(cuò)誤锣险。類似地蹄皱,只指定 setter 函數(shù)的屬性也不能讀,否則在非嚴(yán)格模式下會(huì)返回 undefined芯肤,而在嚴(yán)格模式下會(huì)拋出錯(cuò)誤夯接。 

#二、原型
```
//組合使用構(gòu)造函數(shù)模式和原型模式 
function Person(name, age, job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.friends = ["Shelby", "Court"];
}
Person.prototype = {
        constructor : Person,
        sayName : function(){
            alert(this.name);
        }
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27,"Doctor");
person1.friends.push("Van");
alert(person1.friends); //"Shelby,Count,Van"
alert(person2.friends); //"Shelby,Count"
alert(person1.friends === person2.friends); //false
alert(person1.sayName === person2.sayName); //true ```

#三纷妆、繼承
###1盔几、原型鏈 
```
function SuperType(){
    this.property = true;
} 
SuperType.prototype.getSuperValue = function(){
    return this.property;
};
function SubType(){
    this.subproperty = false;
}
//繼承了 SuperType
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function (){
    return this.subproperty;
};
var instance = new SubType();
alert(instance.getSuperValue()); //true ```


![構(gòu)造函數(shù)和原型之間的關(guān)系 ](http://upload-images.jianshu.io/upload_images/2572649-18f9ce923ba6c63d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

```
//繼承了 SuperType
SubType.prototype = new SuperType();
//使用字面量添加新方法,會(huì)導(dǎo)致上一行代碼無效
SubType.prototype = {
    getSubValue : function (){
    return this.subproperty;
    },
    someOtherMethod : function (){
        return false;
    }
}; ```

###2掩幢、借用構(gòu)造函數(shù) (很少單獨(dú)使用)
```
function SuperType(){
    this.colors = ["red", "blue", "green"];
}
function SubType(){
    //繼承了 SuperType
    SuperType.call(this);//或者:SuperType.apply(this)
}
var instance1 = new SubType();
instance1.colors.push("black");
alert(instance1.colors); //"red,blue,green,black"
var instance2 = new SubType();
alert(instance2.colors); //"red,blue,green" ```
###3逊拍、寄生組合式繼承 
```
function SuperType(name){
    this.name = name;
    this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function(){
    alert(this.name);
};
function SubType(name, age){
    SuperType.call(this, name); //第二次調(diào)用 SuperType()
    this.age = age;
}
SubType.prototype = new SuperType(); //第一次調(diào)用 
SuperType()SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function(){
    alert(this.age);
} ```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末上鞠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芯丧,更是在濱河造成了極大的恐慌芍阎,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缨恒,死亡現(xiàn)場(chǎng)離奇詭異谴咸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)骗露,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門岭佳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人萧锉,你說我怎么就攤上這事珊随。” “怎么了柿隙?”我有些...
    開封第一講書人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵叶洞,是天一觀的道長。 經(jīng)常有香客問我禀崖,道長衩辟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任波附,我火速辦了婚禮艺晴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叶雹。我一直安慰自己财饥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開白布折晦。 她就那樣靜靜地躺著钥星,像睡著了一般。 火紅的嫁衣襯著肌膚如雪满着。 梳的紋絲不亂的頭發(fā)上谦炒,一...
    開封第一講書人閱讀 49,919評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音风喇,去河邊找鬼宁改。 笑死,一個(gè)胖子當(dāng)著我的面吹牛魂莫,可吹牛的內(nèi)容都是我干的还蹲。 我是一名探鬼主播,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谜喊!你這毒婦竟也來了潭兽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤斗遏,失蹤者是張志新(化名)和其女友劉穎山卦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诵次,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡账蓉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逾一。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铸本。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嬉荆,靈堂內(nèi)的尸體忽然破棺而出归敬,到底是詐尸還是另有隱情酷含,我是刑警寧澤鄙早,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站椅亚,受9級(jí)特大地震影響限番,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呀舔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一弥虐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媚赖,春花似錦霜瘪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至磨隘,卻和暖如春缤底,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背番捂。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來泰國打工个唧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人设预。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓徙歼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子魄梯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容