<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                >[success] # js 對象到底是什么 >[danger] ##### 站在多語言的角度去看對象 ~~~ 1.大部分人編程,可能都是從接觸后臺語言開始的,在類似' C++、Java' 這些語言,他們先創建了 類,又從類里面產生了對象。讓大部分開發總會思維定式覺得,什么語言都是類創建對象,并且 學什么語言的時候都會往這種結構去靠 2.js在語言設計初期選擇另一種實現方式'原型',然而實現原型兩種方式: 2.1.一個是并不真的去復制一個原型對象,而是使得新對象持有一個原型的引用; 2.2.另一個是切實地復制對象,從此兩個對象再無關聯。 ~~~ >[danger] ##### 原型和類 ~~~ 1.根據上面的描述我們把常見的編程語言分成兩種'基于類' 和'基于原型','js屬于基于原型' 1.1.'基于類'的編程提倡使用一個關注分類和類之間關系開發模型。在這類語言中,總是先有類, 再從類去實例化一個對象。類與類之間又可能會形成繼承、組合等關系。類又往往與語言的類型系統整合, 形成一定編譯時的能力 1.2.'基于原型'引用'mdn中的解釋':在這種風格中,我們不會顯式地定義[類],而會通過向其它類的實例(對象) 中添加屬性和方法來創建類,甚至偶爾使用空對象創建類。 簡單來說二者的區別:'基于原型'這種風格是在不定義class的情況下創建一個?'object' 2.因此無論是' C++、Java' 這些'基于類' 還是說'js'這種基于'基于原型',他們本質都是'面向對象'只是實現方式不同 3.但由于某些原因'JavaScript' 在推出之時要求模仿java,所以引入了' new、this' 等語言特性,讓在更多的時候 大家忽略了'js'基于原型鏈的優勢 注:這里要說明像java這種語言對象是不能隨便的添加屬性,相比來說'js' 這種更加靈活的語言有了自己的優勢 ~~~ * 對注釋通過代碼說明 ~~~ // 這是'java 、c++'語言所不具備的 var o = { a: 1 }; o.b = 2; console.log(o.a, o.b); //1 2 ~~~ >[danger] ##### 什么是對象 ~~~ 1.上面從已經可以知道,'js' 也好,'C++、Java'也好,他們都是圍繞對象,只是實現的本質不同,到底什么是對象 ,這里引用'winter老師' 文章對'Grandy Booch《面向對象分析與設計》'中的總結來看 1.1.對象具有唯一標識性:即使完全相同的兩個對象,也并非同一個對象。 1.2.對象有狀態:對象具有狀態,同一對象可能處于不同狀態之下。 1.3.對象具有行為:即對象的狀態,可能因為它的行為產生變遷。 ~~~ * 對上面簡單解釋 ~~~ 1.對1.1的解釋 可以通過代碼來看 var a1 = {o:1} var a2 = {o:2} console.log(a1 === a2) // false 我們都知道對象本質是內存地址的指向,因此a1和a2看起來像本質也是不同的 2.對1.2、1.3的解釋,在'java' 簡單粗暴理解他們對象中的'行為'就是'方法','狀態'就是'屬性',在js中我們更多 的是喜歡把兩者共同稱為屬性 var o = { d: 1, // 我是屬性 f() { // 我也是屬性 console.log(this.d); } }; ~~~ >[danger] ##### 都是對象了 js還有什么不同 ~~~ 1.現在我們可以很確切的說'js' 是面向對象的語言,也知道了它和'java、c++'等不同他是'基于原型'的設計理念 ,正是因此讓js 有了許多與眾不同的特點。其中也包含了' 數據屬性/訪問器屬性' 2.這里可以引用'winter老師文章里的話來說': 對 JavaScript 來說,屬性并非只是簡單的名稱和值,JavaScript 用一組特征(attribute)來描述屬性(property)。 ~~~ * 這里簡單來講解' 數據屬性/訪問器屬性' ~~~ 1.接下來的這些屬性講解 ,可以理解成:它允許使用者在寫和讀屬性時,得到完全不同的值,它可以視為一種函數 的語法糖。 1.1 屬性: 'value':就是屬性的值。 'writable':決定屬性能否被賦值。 'enumerable':決定 for in 能否枚舉該屬性。 'configurable':決定該屬性能否被刪除或者改變特征值 1.2 訪問器屬性: 'getter':函數或 undefined,在取屬性值時被調用。 'setter':函數或 undefined,在設置屬性值時被調用。 'enumerable':決定 for in 能否枚舉該屬性。 'configurable':決定該屬性能否被刪除或者改變特征值。 ~~~ >[danger] ##### 關于更多 ~~~ 1.想對'js原型' 有更深入的了解參考文章目錄中的'js -- 原型模式了解' 2.想對'數據屬性/訪問器屬性' 有更深入的了解參考文章目錄中的'Object -- 數據屬性/訪問器屬性' ~~~ >[danger] ##### 總結 ~~~ 1.當我從'java' ,'pyhon' 這些 語言 轉換到'js'時候我最不理解的就是'js'的對象。看起來和這些語言相同,但實際 使用起來讓我腦中回蕩著這'小朋友是不是有很多問號',仔細來說的學習'js' 可能需要適當的丟棄一些原有對 編程的認識,因此身邊也能常見到很多后臺開發在管理前端的時候,更多喜歡將后臺的代碼規則帶入,這種 帶入我覺得對整體代碼結構維護是有提升的,但也抹殺了js一些自己的特點 ~~~ >[danger] ##### 參考文章 [winter -- 重學前端](https://time.geekbang.org/column/article/79539)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看