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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 對象概述 面向對象(Object-Oriented,OO)的語言有一個標志,那就是它們都有類的概念,而通過類可以創建任意多個具有相同屬性和方法的對象。但是,ECMAScript中并沒有類的概念,所以它的對象也有有所不同。 ECMAScript對象是一個無序屬性的集合,其屬性可以包含基本值、對象或函數。 對象的每個屬性或方法都有一個名字,而每個名字都映射到一個值。 每個對象都是基于一個引用類型創建的。 **1、對象** **1.1 創建對象** (1)創建自定義對象的最簡單方式就是創建一個Object的實例,然后給其添加屬性和方法: ``` var person = new Object(); person.name = 'tg'; person.age = 10; person.say = function(){ console.log(this.name); } ``` 上面的例子創建了一個名為person的對象,并為它添加了兩個屬性(name、age)和一個方法(say())。 (2)對象字面量 ``` var person = { name: 'tg', age: 10, say: function(){ console.log(this.name); } } ``` 這個person對象和上面例子是等價的。 **1.2 屬性類型** ECMA-262第5版在定義只有內部才用的特性(attribute)時,描述了屬性(property)的各種特征。ECMA-262定義這些特性是為了實現JavaScript引擎用的,因此在JavaScript中不能直接訪問它們。該規范將它們放在了兩對方括號中,表示特性是內部值,如[[Enumerable]]。 ECMAScript中有兩種屬性:數據屬性和訪問權屬性 **1.2.1 數據屬性** 數據屬性包含一個數據值的位置,在這個位置可以讀取和寫入值。 數據屬性有4個描述特性: - [[Configurable]]:表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。比如直接在對象上定義的屬性,它們的這個特性默認值為true。 - [[Enumerable]]:表示能否通過for-in循環返回屬性。對于直接在對象上定義的值,默認為true。 - [[Writable]]:表示能否修改屬性的值。 - [[Value]]: 包含這個屬性的數據值。讀取屬性值時,從這個位置讀;寫入屬性值時,把新值保存在這個位置。默認值為undefined。 要修改屬性默認的特性,必須使用ECMAScript 5的`Object.defineProperty()`方法,這個方法接收三個參數:屬性所在的對象、屬性的名字和一個描述符對象。其中,描述符對象的屬性必須是:configurable、enumerable、writable和value。 ``` var person = {}; Object.defineProperty(person, 'name', { writable: false, value: 'tg' }); console.log(person.name); // "tg" person.name = 'tg2'; console.log(person.name); // "tg" ``` 在上面的例子中,我們將person對象中的名為name的屬性的`writable`設置為false,也就是不可修改,所以即使后面執行了person.name='tg2',最后person對象的name值依舊是原始值。 注意:在嚴格模式下,如果對一個不可修改的屬性執行賦值操作,會拋出錯誤;非嚴格模式下則忽略賦值操作。 一旦將configurable特性設置為false后,就不能再把它變回可配置的了,如果再修改除writable之外的特性,都會導致錯誤。 **1.2.2 訪問器屬性** 訪問器屬性不包含數據值,它們包含一對getter和setter函數(非必需)。在讀取訪問器屬性時,會調用getter函數,返回有效的值;在寫入訪問器屬性時,會調用setter函數并傳入新值,它負責決定如何處理數據。 訪問器屬性: - [[Configurable]]:表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。比如直接在對象上定義的屬性,它們的這個特性默認值為true。 - [[Enumerable]]:表示能否通過for-in循環返回屬性。對于直接在對象上定義的值,默認為true。 - [[Get]]:在讀取屬性時調用的函數,默認為undefined - [[Set]]:在寫入屬性時調用的函數,默認為undefined 訪問器屬性不能直接定義,也是要使用`Object.defineProperty()`方法來定義。 ``` var person = { _age: 20, intro: '' }; Object.defineProperty(person, 'age', { get: function() { return this._age; }, set: function(newValue){ if(newValue < 18) { this.intro = '裝嫩'; this._age = newValue; } } }); console.log(person.age); // 20 person.age = 17; console.log(person.intro); // "裝嫩" ``` 在上面的例子中,訪問器屬性age有一個getter函數和一個setter函數。getter函數返回`_age`的值,setter函數通過判斷`age`的設置值來改變其他屬性值。 **1.2.3 定義多個屬性** ECMAScript 5提供的`Object.defineProperties()`方法可以通過描述符一次定義多個屬性,這個方法接收兩個對象參數,第一個對象是要添加和修改其屬性的對象,第二個對象的屬性與第一個對象要添加或修改的屬性一一對應。 ``` var person = {}; Object.defineProperties(person, { _age: { value: 20 }, intro: { value: '' }, age: { get: function(){ return this._age; }, set: function(newValue){ if(newValue < 18) { this.intro = '裝嫩'; this._age = newValue; } } } }); ``` **1.2.4 讀取屬性的特性** ECMAScript 5提供的`Object.getOwnPropertyDescriptor()`方法可以取得給定屬性的描述符,它接受兩個參數:屬性所在的對象和要讀取其描述符的屬性名稱,返回來的是一個對象,如果是訪問器屬性,這個對象的屬性有configurable、enumerable、get和set;如果是數據屬性,這個對象的屬性有configurable、enumerable、writable和value。 ``` var person = { _age: 20, intro: '' }; Object.defineProperty(person, 'age', { get: function() { return this._age; }, set: function(newValue){ if(newValue < 18) { this.intro = '裝嫩'; this._age = newValue; } } }); var descriptor = Object.getOwnPropertyDescriptor(person,'age'); console.log(descriptor.enumerable); // false console.log(typeof descriptor.get); // "function" ``` 在JavaScript中,可以針對任何對象--包括DOM和BOM對象,使用`Object.getOwnPropertyDescriptor()`方法。
                  <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>

                              哎呀哎呀视频在线观看