數據屬性: 數據屬性包含一個數據值的位置,在這個位置可以讀取和寫入值。 4個描述的行為特性: writable 表示能否修改屬性的值。預設為true Enumerable 表示能否過過for in迴圈返回屬性是否可以枚舉。 configuralbe 表示是否能過來delete刪除屬性從來重新定義屬性
數據屬性:
數據屬性包含一個數據值的位置,在這個位置可以讀取和寫入值。
4個描述的行為特性:
writable 表示能否修改屬性的值。預設為true
Enumerable 表示能否過過for in迴圈返回屬性是否可以枚舉。
configuralbe 表示是否能過來delete刪除屬性從來重新定義屬性,能否修改其配置。
value 包含這個屬性的數據值。讀取屬性值的時候,從這個位置讀取。
寫入屬性值的時候,把新值保存在這個位置。這個特性的預設值為true。
1 <script> 2 function Foo(){} 3 Foo.prototype.z = 3 4 var obj = new Foo() 5 obj.x = 1 6 alert("x" in obj) //=>true x是obj對象的自有屬性 7 alert("z" in obj) //=>true z是obj原型上繼承來看屬性 8 //hasOwnProperty 必須是對象上的自有的屬性才返回true 9 alert(obj.hasOwnProperty("x")) //true x是obj對象上的自有屬性 10 alert(obj.hasOwnProperty("z")) //false z是obj原型上繼承來的屬性,不是他的私有屬性 11 alert(Foo.prototype.hasOwnProperty("z")) //=>true z是原型上自有的屬性,所以返回true 12 alert(Object.prototype.hasOwnProperty("toString"))//=>toString 是頂級對象上的自有屬性,所以返回true 13 //prpertyisEnumeralbe 的意思是必是對象上的自有屬性而且要以是枚舉的,但是對象的可枚舉屬性Enumeralbe是true,才能返回true 14 alert(obj.propertyIsEnumerable("x")) //true x是obj對象上可枚舉的屬性 15 alert(obj.propertyIsEnumerable("z")) //false z是obj原型上的屬性,不是自有屬性,則不可以枚舉 16 alert(Foo.prototype.propertyIsEnumerable("z")) //true x是原型上的自有屬性,所以可以枚舉 17 </script>
如何枚舉屬性,枚舉屬性對於原型又有什麼區別?
演示代碼如下:
1 <script> 2 function Foo(){} 3 Foo.prototype.age = 22 4 var obj = new Foo() 5 obj.name = "ziksang" 6 obj.addr = "上海" 7 obj.telephone = 15921848427 8 for(var p in obj){ //使用FOR IN 可以枚舉出自身的屬性和原型上的屬性 9 console.log(p) 10 } 11 console.log(Object.keys(obj)) //使用Object.keys(obj)只可以枚舉Obj對象上自身的屬性 12 console.log(Object.getOwnPropertyNames(obj)) //Object.getOwnPropertyNames(obj)是列出Ojb對象上自身的屬性名,與枚舉不相關,但是又類似枚舉,大家要註意區分 13 14 </script>