javascript

4.1變量,作用域
Javascript變量是松散類型的本質,決定了它只是在特定的時間用于保存特定的值而已。由于不存在定義某個變量必須要保存何種數(shù)據(jù)類型值的規(guī)則,變量的值及其數(shù)據(jù)類型可以在腳本的生命周期內改變。
ECMAScript變量可能包含兩種不同數(shù)據(jù)類型的值:
基本類型和引用類型
基本類型就是簡單的數(shù)據(jù)段 (Undefined Null Number Boolean String )基本類型是按值訪問的
引用類型是那些可能由多個值構成的對象(Object)引用類型實際上是在操作對象的引用,而不是實際的對象

區(qū)別
1復制變量值
1)基本類型:會在變量對象上創(chuàng)建一個新值,然后把改值復制到新變量
分配的位置上 互不影響 完全獨立
2)引用類型:復制的是原來對象的指針,這個指針指向存儲在堆中的一個對象。復制操作結束后實際上兩個變量引用同一個對象。改變其一會影響另一個變量

4.1.4檢測類型
基本數(shù)據(jù)類型的檢測用typeof
引用類型的檢測用instanceof

6.2創(chuàng)建對象
1.工廠模式

       function obj(name, age, job){
          var o = new Object();
          o.name = name;
          o.age = age;
          o.job = job;
          o.sayName = function(){
              alert(this.name);
          }
          return o;
      }

      var person1 = obj("Nike",28,"enginner")

2構造函數(shù)模式

function Person(name,age,job){
            this.name = name;
            this.age = age;
            this.job = job;
            this.sayName = function(){
                alert(this.name)
            }
        }
        var person2 = new Person("Lucy",28,"enginner");

3原型模式

        function Person(){}
        Person.prototype.name = "Nike";
        Person.prototype.age = 28;
        Person.prototype.job = "Engineer";
        Person.sayName = function(){
            alert(this.name);
        }

4組合使用構造函數(shù)和原型

        function Person(name, age, job){
            this.name = name;
            this.age = age;
            this.job = job;
            this.friends = ["Nike","Lucy"]
        }
        Person.prototype = {
            constructor : Person,
            sayName : function(){
                alert(this.name);
            }
        }
        var person1 = new Person();
        var person2 = new Person();
        person2.friends.push("Lili");
        console.log(person2.friends)
        console.log(person1.friends)
        console.log(person2.friends === person1.friends)

5動態(tài)原型模式
有其他 OO 語言經驗的開發(fā)人員在看到獨立的構造函數(shù)和原型時,很可能會感到非常困惑。動態(tài)原
型模式正是致力于解決這個問題的一個方案,它把所有信息都封裝在了構造函數(shù)中,而通過在構造函數(shù)
中初始化原型(僅在必要的情況下),又保持了同時使用構造函數(shù)和原型的優(yōu)點。換句話說,可以通過
檢查某個應該存在的方法是否有效,來決定是否需要初始化原型。來看一個例子

        function Person(name, age, job){
            this.name = name;
            this.age = age;
            this.job = job;
            if(typeof this.sayName != "function"){
                Person.prototype.sayName = function(){
                    alert(this.name);
            }    
          }
        }
        var fr = new Person("Bill",10,"student");

6寄生構造函數(shù)模式

function SpecialArray(){
            var value = new Array();
            value.push.apply(value, arguments);
            value.toPipedString = function(){
                return this.join("|");
            }
            return value;
        }
        var val = new SpecialArray("red","blue");
        console.log(val instanceof SpecialArray)

in 操作符 和 hasOwnProperty()
有兩種方式使用 in 操作符:單獨使用和在 for-in 循環(huán)中使用。在單獨使用時,in 操作符會在通
過對象能夠訪問給定屬性時返回 true,無論該屬性存在于實例中還是原型中。
由于 in 操作符只要通過對象能夠訪問到屬性就返回 true,hasOwnProperty()只在屬性存在于
實例中時才返回 true

keys()
要取得對象上所有可枚舉的實例屬性,可以使用 ECMAScript 5 的 Object.keys()方法。這個方法
接收一個對象作為參數(shù),返回一個包含所有可枚舉屬性的字符串數(shù)組

function Person(){
}
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
 alert(this.name);
};
var keys = Object.keys(Person.prototype);
alert(keys); //"name,age,job,sayName"
var p1 = new Person();
p1.name = "Rob";
p1.age = 31;
var p1keys = Object.keys(p1);
alert(p1keys); //"name,age" 

****原型的動態(tài)性****
盡管可以隨時為原型添加屬性和方法,并且修改能夠立即在所有對象實例中反映出來,但如果是重
寫整個原型對象,那么情況就不一樣了。我們知道,調用構造函數(shù)時會為實例添加一個指向最初原型的
[[Prototype]]指針,而把原型修改為另外一個對象就等于切斷了構造函數(shù)與最初原型之間的聯(lián)系。
請記住:實例中的指針僅指向原型,而不指向構造函數(shù)

function Person(){
}
var friend = new Person();

Person.prototype = {
 constructor: Person,
 name : "Nicholas",
 age : 29,
 job : "Software Engineer",
 sayName : function () {
 alert(this.name);
 }
};
friend.sayName(); //error 
image.png

proto

繼承是面向對象編程的最最基礎的概念,本文主要講解JS中繼承的實現(xiàn)方式及原理。

將共享方法抽象到函數(shù)prototype中。

對于共享屬性/方法,沒必要每個對象都復制一份,只需要能引用到這個屬性就可以了,而這與prototype的思路正好相同。

文章--關于面向對象

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容

  • 第5章 引用類型 引用類型的值(對象)是引用類型的一個示例。在ECMAScript 中,引用類型是一種數(shù)據(jù)結構,用...
    力氣強閱讀 724評論 0 0
  • 第十章 變量、作用域及內存 JavaScript的變量與其他語言的變量有很大區(qū)別。JavaScript變量是...
    上書房_張強閱讀 433評論 0 2
  • 最近熱播劇《我的前半生》教育了很多的女孩、女人。 一個女人若是笨到覺得男人會真的寵你愛你養(yǎng)你一輩子...
    圓圓芳芳閱讀 277評論 0 3
  • 影子對著你來的方向我想問你是否讓我心不再背光
    蕓蕓吶閱讀 234評論 0 4
  • 熊大熊二家的親戚帶著娃去旅游,要把“土匪”寄養(yǎng)過來,征求小貝,瑪麗意見的時候,瑪麗一如既往地高冷,小貝高興的“...
    喵小秋閱讀 375評論 0 0