聽課微專業聽到了一嘴物件屬性可列舉之類的。。
以前看js高階程式設計,都是匆匆看過去了。
我覺得我不能再把不懂的留到明天,總是記得這裡沒有太清楚。給自己留乙個坑。
所以記錄一下
物件屬性有四種:
vaule,writable、configurable、enumerable,還有get和set屬性。
字面量:指的是為變數賦值時的常數量 。。我的通俗的理解,就是值。
物件字面量:是指變數的值為乙個物件。這個變數儲存的是乙個引用位址。
插一句,建立物件有兩種方式:一種是new操作符,一種是物件字面量的方式。(前一種呼叫方法,沒有後一種速度快)
像js高階程式設計中有乙個例子:
用字面量方式重寫建構函式的
function person()
person.prototype.username = '托馬斯曼';
person.prototype.password = '1234567';
person.prototype.hometown = '湖北武漢';
var person = new person();
person.prototype=
}person.a()
}person.a()
** vm1751:20 uncaught typeerror: person.a is not a function
at :20:8
person.prototype它是乙個物件,它用物件字面量的方式重寫之後,它的引用位址已經變了。跟person.__proto__指向的不是乙個位址。所以,person.a()報錯。
插了乙個題外話,我們繼續講物件屬性特性:
var obj1 = new object();
object.defineproperty(obj1,"y",);
var myobject = {};
object.defineproperty( myobject, "a", );
myobject.a = 3;
myobject.a; // 2
enumerable控制屬性是否會出現在物件的屬性列舉中,比如說for…in迴圈。
如果把enumerable設定成false,這個屬性將不會出現在列舉中,但是仍然可以正常訪問它。
function person()
person.prototype.work=function()
person.prototype.name='2'
john=new person();
for (prop in john)
//輸出:
name
work
它的預設值為true,因為上面我也沒有去定義它的可列舉性:
獲取乙個物件的可列舉性有4中辦法:
for…in迴圈:只遍歷物件自身的和繼承的可列舉的屬性。
object.keys():返回物件自身的所有可列舉的屬性的鍵名。
json.stringify():只序列化物件自身的可列舉的屬性。
object.assign(): 只拷貝物件自身的可列舉的屬性。
configurable為true,可以修改其他屬性值(writable等),亦可以刪除物件的屬性值,delete obj.y
configurable,一旦把該屬性定義為false之後:
var person=;
object.defineproperty(person,'name',);
person.name='虛假名字1';
console.log(person.name) //虛假名字1
object.defineproperty(person,'name',);
person.name='虛假名字2';
console.log(person.name) //虛假名字1
說明configurable為false之後,write可以由true改為false;
那反過來呢?
var person=;
object.defineproperty(person,'name',);
person.name='虛假名字1'; //實際名字
console.log(person.name)
object.defineproperty(person,'name',);//報錯
person.name='虛假名字2';
console.log(person.name)
JavaScript物件屬性的特性
除了包含名字和值之外,屬性還包含的一些標識它們可寫 可列舉和可配置的特性。資料屬性的4個特性分別是它的值 value 可寫性 writable 可列舉性 enumerable 和可配置性 configurable 訪問器屬性的4個特性是讀取 get 寫入 set 可列舉性和可配置性。ecmascri...
js 中物件屬性的特性
資料屬性 資料屬性包含乙個資料值的位置,在這個位置可以讀取和寫入值。4個描述的行為特性 writable 表示能否修改屬性的值。預設為true enumerable 表示能否過過for in迴圈返回屬性是否可以列舉。configuralbe 表示是否能過來delete刪除屬性從來重新定義屬性,能否修...
關於物件和屬性的特性
又有個細節讓我迷糊了一會兒。屬性的特性裡只有 writable,configurable,value,enumerable 對於資料而言 看到可擴充套件 不可擴充套件的時候就有點蒙了,也沒看到extendable一類的特性啊。然後才發現可擴充套件性是針對物件,而不是屬性的。另外如果configura...