8.10.5 ToPropertyDescriptor

2010-04-19

PropertyDescriptor ToPropertyDescriptor(Obj)

Create a new PropertyDescriptor based on the attributes of the properties of given object.

Code: (Abstract Ecma)
function ToPropertyDescriptor(Obj){
if (Type(Obj) != 'Object') throw TypeError;
var desc = new PropertyDescriptor(); // a new uninitialized property descriptor
if (Obj.[[HasProperty]]("enumerable")) {
var enum = Obj.[[Get]]("enumerable");
desc.[[Enumerable]] = ToBoolean(enum);
}
if (Obj.[[HasProperty]]("value")) {
var value = Obj.[[Get]]("value");
desc.[[Value]] = ToBoolean(value);
}
if (Obj.[[HasProperty]]("writable")) {
var write = Obj.[[Get]]("writable");
desc.[[Writable]] = ToBoolean(write);
}
if (Obj.[[HasProperty]]("get")) {
var get = Obj.[[Get]]("get");
desc.[[Get]] = ToBoolean(get);
}
if (Obj.[[HasProperty]]("set")) {
var set = Obj.[[Get]]("set");
desc.[[Set]] = ToBoolean(set);
}
if ([[Get]] in desc || [[Set]] in desc) {
if ([[Value]] in desc || [[Writable]] in desc) {
throw TypeError;
}
}
return desc;
}