Consider the classic getter/setter implementation:
var test_obj={
get num(){return this._size},
set num(val){this._size=val;}
};
var obj1=Object.create(test_obj);
var obj2=Object.create(test_obj);
Object.getOwnPropertyNames(obj1); //[]
Object.getOwnPropertyNames(obj2); //[]
obj1.num=5;
obj2.num=7;
console.log(test_obj.num); //undefined
console.log(obj1.num); //5
console.log(obj2.num); //7
Object.getOwnPropertyNames(obj1); //["_size"]
Object.getOwnPropertyNames(obj2); //["_size"]
The above is completely comprehensible to me since, for example, the value of getter obj1.num
is stored in data property obj1._size
and the value of getter obj2.num
is stored in data property obj2._size
(for both objects obj1
and obj2
, _size
is an own property).
My problem is I cannot find the equivalent for built-in getter/setter properties. There are plenty of them, let's pick id which is a getter/setter of Element.prototype.
var elem=document.getElementById('mydiv');
elem
is an instance object of HTMLDivElement
interface object, the prototype chain of elem
includes Element.prototype
and now we have:
elem.id; //"mydiv"
Object.getOwnPropertyNames(elem); //[]
Where elem.id
's value is stored since elem
does not have any own properties? In our example, it is _size
that does this job. Maybe, there are some hidden properties upon elem
which are not accessible? However, I cannot find any way in Javascript to hide an object property.
Thank you