javascript: find the prototype object to which a property belongs
inheritance, javascript, prototype-chain
Solution
No. There isn't. You have to traverse the prototype chain:
function owner(obj, prop) {
var hasOwnProperty = Object.prototype.hasOwnProperty;
while (obj && !hasOwnProperty.call(obj, prop))
obj = Object.getPrototypeOf(obj);
return obj;
}
Now you simply do:
var obj = owner(instance, "area");
console.log(obj === Rectangle); // true
If `instance` or its prototypes do not have the property `area` then `owner` returns `null`.
Problem
I have an instance from Square which inherits from Rectangle ``` instance instanceof Rectangle --> true instance instanceof Square --> true instance.area() ; // --> area is defined by Rectangle ``` Now, in my code I don't know where the 'area' function is defined and I want the prototype object which defines it. Of course I can traverse the prototype chain (not tested) ``` var proto = instance ; while( !(proto = Object.getPrototypeOf(proto)).hasOwnProperty('area') ) {} // do something with 'proto' ``` However, I was wondering if there is a better/faster way to get the prototype object to which a function belongs ?