<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 面向對象編程 JavaScript的所有數據都可以看成對象,那是不是我們已經在使用面向對象編程了呢? 當然不是。如果我們只使用`Number`、`Array`、`string`以及基本的`{...}`定義的對象,還無法發揮出面向對象編程的威力。 JavaScript的面向對象編程和大多數其他語言如Java、C#的面向對象編程都不太一樣。如果你熟悉Java或C#,很好,你一定明白面向對象的兩個基本概念: 1. 類:類是對象的類型模板,例如,定義`Student`類來表示學生,類本身是一種類型,`Student`表示學生類型,但不表示任何具體的某個學生; 2. 實例:實例是根據類創建的對象,例如,根據`Student`類可以創建出`xiaoming`、`xiaohong`、`xiaojun`等多個實例,每個實例表示一個具體的學生,他們全都屬于`Student`類型。 所以,類和實例是大多數面向對象編程語言的基本概念。 > JavaScript不區分類和實例的概念,而是通過原型(prototype)來實現面向對象編程。 原型是指當我們想要創建`xiaoming`這個具體的學生時,我們并沒有一個`Student`類型可用。那怎么辦?恰好有這么一個現成的對象: ~~~ var robot = { name: 'Robot', height: 1.6, run: function () { console.log(this.name + ' is running...'); } }; ~~~ 我們看這個`robot`對象有名字,有身高,還會跑,有點像小明,干脆就根據它來“創建”小明得了! 于是我們把它改名為`Student`,然后創建出`xiaoming`: ~~~js var Student = { name: 'Robot', height: 1.2, run: function () { console.log(this.name + ' is running...'); } }; var xiaoming = { name: '小明' }; xiaoming.__proto__ = Student; ~~~ 注意最后一行代碼把`xiaoming`的原型指向了對象`Student`,看上去`xiaoming`仿佛是從`Student`繼承下來的: ~~~js xiaoming.name; // '小明' xiaoming.run(); // 小明 is running... ~~~ `xiaoming`有自己的`name`屬性,但并沒有定義`run()`方法。不過,由于小明是從`Student`繼承而來,只要`Student`有`run()`方法,`xiaoming`也可以調用: > JavaScript的原型鏈和Java的Class區別就在,它沒有“Class”的概念,所有對象都是實例,所謂繼承關系不過是把一個對象的原型指向另一個對象而已。 如果你把`xiaoming`的原型指向其他對象: ~~~ var Bird = { fly: function () { console.log(this.name + ' is flying...'); } }; xiaoming.__proto__ = Bird; ~~~ 現在`xiaoming`已經無法`run()`了,他已經變成了一只鳥: ~~~ xiaoming.fly(); // 小明 is flying... ~~~ 在JavaScrip代碼運行時期,你可以把`xiaoming`從`Student`變成`Bird`,或者變成任何對象。 > *請注意*,上述代碼僅用于演示目的。在編寫JavaScript代碼時,不要直接用`obj.__proto__`去改變一個對象的原型,并且,低版本的IE也無法使用`__proto__`。`Object.create()`方法可以傳入一個原型對象,并創建一個基于該原型的新對象,但是新對象什么屬性都沒有,因此,我們可以編寫一個函數來創建`xiaoming`: ~~~js // 原型對象: var Student = { name: 'Robot', height: 1.2, run: function () { console.log(this.name + ' is running...'); } }; function createStudent(name) { // 基于Student原型創建一個新對象: var s = Object.create(Student); // 初始化新對象: s.name = name; return s; } var xiaoming = createStudent('小明'); xiaoming.run(); // 小明 is running... xiaoming.__proto__ === Student; // true ~~~ 這是創建原型繼承的一種方法,JavaScript還有其他方法來創建對象,我們在后面會一一講到。
                  <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>

                              哎呀哎呀视频在线观看