摘要:不管函數還是數據,都可以稱為某某對象的屬性。一些細節輸出結果如下可以看出,函數是有的數據屬性是創建對象時定義的,所有屬性特性都是是用定義的,默認為數據屬性,所有屬性特性默認為。訪問器屬性暫時想到的,就是通過改變該屬性改變內部多個屬性。
都知道js是面向對象的,創建了對象后,對象中保存的就是一組組名值對,值可以是數據類型或函數。不管函數還是數據,都可以稱為某某對象的屬性。再細分,屬性可以有兩個類型:數據屬性或訪問器屬性。
因此,數據屬性不要誤解為是數據的屬性類型,函數的屬性類型也是數據屬性的。
var obj = {say:function(){return this.name;},age:11}; console.log(Object.getOwnPropertyDescriptors(obj)); //輸出{value: ?, writable: true, enumerable: true, configurable: true}
數據屬性(4個):
value: 大家熟知的一樣,保存的是數據值,如果是函數,保留的就是整個函數。
writable: 是否可修改,設置為false可以巧妙定義出"私有變量"。true表示可修改,false則相反。
enumerable: 該屬性是否可被枚舉出。true表示可枚舉,false則相反。
configurable: delete屬性有沒有用,能否修改value和enumerable屬性,能否把屬性改為訪問器屬性。true就是都可以,false就是都不可以。
訪問器屬性(4個):
configurable:同上
enumerable: 同上
get:一個用于訪問其他屬性值的函數
set:一個用于修改其他屬性值的函數
對于這些屬性類型,可以修改,用defineProperty()或defineProperties();可以讀取,用getOwnPropertyDescriptor()或getOwnPropertyDescriptors()。當然,訪問器屬性只能用defineProperty()或defineProperties()創建。
一些細節:
var obj = {say:function(){return this.name;},age:11}; Object.defineProperty(obj,"name",{}); console.log(Object.getOwnPropertyDescriptors(obj)); //輸出結果如下: //age:{value: 11, writable: true, enumerable: true, configurable: true} //name:{value: undefined, writable: false, enumerable: false, configurable: false} //say:{value: ?, writable: true, enumerable: true, configurable: true}
可以看出,函數say是有value的數據屬性;age是創建對象時定義的,所有屬性特性都是true;name是用defineProperty()定義的,默認為數據屬性,所有屬性特性默認為false。
var obj = {age:11}; Object.defineProperty(obj,"age",{ configurable:false }); Object.defineProperty(obj,"age",{ writable:false, // enumerable:false, 會報錯 // configurable:true, 會報錯 value:12 }); Object.defineProperty(obj,"name",{ configurable:false, //如果不指定,默認也都是false value:2 }); Object.defineProperty(obj,"name",{ // writable:false, 會報錯 // enumerable:false, 會報錯 // configurable:true, 會報錯 // value:12 會報錯 });
創建時定義的屬性:修改了configurable后,其實還是可以修改writable和value屬性的。
defineProperty()定義的屬性:configurable一旦是false,以后就不可能在更改任何屬性。
訪問器屬性暫時想到的,就是通過改變該屬性改變內部多個屬性。而且,如果某屬性writable是false,訪問器屬性改變該屬性會無效。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93131.html
摘要:寫在前面金三銀四又到了一年一度的跳槽季相信大家都在準備自己面試筆記我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結方便自己復習詳細內容會在之后一一對應地補充上去有些在我的個人主頁筆記中也有相關記錄這里暫且放一個我的面試知識點目錄大家 寫在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準備自己面試筆記, 我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結,方便自...
摘要:寫在前面金三銀四又到了一年一度的跳槽季相信大家都在準備自己面試筆記我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結方便自己復習詳細內容會在之后一一對應地補充上去有些在我的個人主頁筆記中也有相關記錄這里暫且放一個我的面試知識點目錄大家 寫在前面: 金三銀四, 又到了一年一度的跳槽季, 相信大家都在準備自己面試筆記, 我也針對自己工作中所掌握或了解的一些東西做了一個目錄總結,方便自...
摘要:在標簽中添加屬性,本質上是跟在標簽里面寫屬性時一樣的,所以屬性值最終都會編譯為字符串類型。這個節點包括很多,比如,以及一些方法等方法。一個對象有很多,該集合名字為,里面有其他以及,里面有很多。 一、變量類型和計算 JS中使用typeof能得到哪些類型 變量類型 值類型:變量本身就是含有賦予給它的數值的,它的變量本身及保存的數據都存儲在棧的內存塊當中 引用類型:引用類型當然是分配到...
摘要:每一個函數都有一個屬性,而這個屬性也是一個對象,就叫做原型對象,對象里有一個屬性指向了函數。所以給原型添加一個屬性,對象也會有這個屬性。 js要掌握的東西。原型 閉包聲明提升基本數據類型高階函數JSONJSONP 跨域 iframe 通信Ajax原生DOM操作(比如 逆序DOM節點)事件捕捉,捕獲,冒泡,代理Array常用函數String常用函數ES5 + ES6VUE框架部分(大部分...
閱讀 839·2021-10-25 09:48
閱讀 615·2021-08-23 09:45
閱讀 2508·2019-08-30 15:53
閱讀 1765·2019-08-30 12:45
閱讀 604·2019-08-29 17:21
閱讀 3419·2019-08-27 10:56
閱讀 2555·2019-08-26 13:48
閱讀 704·2019-08-26 12:24