屬性描述符

2021-09-13 00:15:36 字數 2639 閱讀 8761

在es5開始,所有屬性都具備了屬性描述符。
我們可以通過object.getownpropertydescriptor來觀察到屬性的描述符,它是長這樣子的。

object.getownpropertydescriptor(, 'a');

//

writable決定該屬性是否唯讀。

enumerable決定該屬性是否可列舉。

configurable決定該屬性是否可重新設定描述符。

當屬性的configurable為true時,我們可以通過object.defineproperty來修改屬性描述符。

'use strict';

var foo = ;

for(var i in foo) ;

// 'a'

object.defineproperty(foo, 'a', );

foo.a = 2;// uncaught typeerror: cannot assign to read only property 'a' of object '#'

for(var i in foo) ;

object.defineproperty(foo, 'a', );

getter和setter有兩種方式定義

字面量定義

var foo = ,

set a(value)

};

使用object.defineproperty定義

var foo = ;

object.defineproperty(

foo,

'a',

, set(value)

});

這個時候再看看屬性a的描述符。

object.getownpropertydescriptor(foo, 'a')

//

當出現gettersetter時,valuewritable就會失效。

此時,屬性a的描述符被稱為訪問描述符

訪問描述符屬性描述符互斥,如果此時再重新設定value或者writable描述符,settergetter也會被丟棄。

當你給乙個物件賦值乙個新的屬性foo時,如果該物件的原型鏈上已存在屬性foo,並且foo被標記為唯讀(writable: false)時,嚴格模式下會丟擲異常,非嚴格模式下,這條賦值語句會被忽略。這種屬性稱為遮蔽屬性
舉個例子

'use strict';

var anotherobject = {};

object.defineproperty(anotherobject, 'foo', );

var myobject = object.create(anotherobject);// 將myobject的原型設定為anotherobject

console.log(myobject);// {}

console.log(myobject.foo);// 1

myobject.foo = 2;// uncaught typeerror: cannot assign to read only property 'a' of object '#'

還有一種情況

當你給乙個物件賦值乙個新的屬性foo時,如果該物件的原型鏈上已存在屬性foo,並且foo被設定了setter時,將會呼叫這個setter,並且該賦值語句將會被忽略,此時也會發生屬性遮蔽。
var anotherobject = {};

object.defineproperty(anotherobject, 'foo', ,

get()

});var myobject = object.create(anotherobject);// 將myobject的原型設定為anotherobject

myobject.foo = 2;// 此時會觸發anotherobject.foo的setter,控制台輸出2

console.log(object.hasownproperty(myobject, 'foo'));// false

使用object.defineproperty來新增屬性。

屬性描述符

property descriptor 屬性描述符 是乙個普通物件,用於描述乙個屬性的相關資訊 通過object.getownpropertydescriptor 物件,屬性名 可以得到乙個物件的某個屬性的屬性描述符 object.getownpropertydescriptors 物件 可以得到某...

物件屬性描述符

從 es5 開始,物件的屬性都具備了屬性的描述符,它能設定屬性的特性。我們可以使用 object.defineproperty 來新增或者配置乙個屬性並對它的特性進行配置。屬性有 writable enumerable 和 configurable 這三個或之一都為屬性描述符。一.writable ...

Object 屬性描述符

屬性描述符是乙個普通的物件中用來描述屬性的相關資訊。object.getownpropertydescriptor 返回指定屬性描述符 返回物件的key屬性的屬性描述 屬性描述 value 屬性值configurable 該屬性是否可以被屬性描述符修改 enumerable 是否可以列舉 writa...