# inheritedPropertyDescriptor > Return a property descriptor for an object's inherited property.
## Usage ```javascript var inheritedPropertyDescriptor = require( '@stdlib/utils/inherited-property-descriptor' ); ``` #### inheritedPropertyDescriptor( obj, property\[, level] ) Returns a property descriptor for an object's inherited property. ```javascript function Foo() { return this; } Foo.prototype.bar = 'foo'; var obj = new Foo(); var desc = inheritedPropertyDescriptor( obj, 'bar' ); // returns {'configurable':true,'enumerable':true,'writable':true,'value':'foo'} ``` By default, the function walks an object's entire prototype chain. To limit the inheritance level, provide a `level` argument. ```javascript var inherit = require( '@stdlib/utils/inherit' ); function Bar() { return this; } Bar.prototype.beep = 'boop'; function Foo() { Bar.call( this ); return this; } inherit( Foo, Bar ); var f = new Foo(); var desc = inheritedPropertyDescriptor( f, 'beep', 1 ); // returns null ```
## Notes - This function differs from the built-in `Object.getOwnPropertyDescriptor()` as follows: - If provided `null` or `undefined`, the function returns `null`, rather than throwing an error. - If an object does not have a provided inherited property, the function returns `null`, rather than `undefined`.
## Examples ```javascript var defineProperty = require( '@stdlib/utils/define-property' ); var inheritedPropertyDescriptor = require( '@stdlib/utils/inherited-property-descriptor' ); function Foo() { this.beep = 'boop'; this.a = { 'b': 'c' }; defineProperty( this, 'baz', { 'value': 'qux', 'configurable': true, 'writable': true, 'enumerable': false }); return this; } Foo.prototype.foo = [ 'bar' ]; var obj = new Foo(); var desc = inheritedPropertyDescriptor( obj, 'foo' ); console.log( desc ); // => {'configurable':true,'enumerable':true,'writable':true,'value':['bar']} ```