Return an array of an object's inherited writable symbol properties.
npm install @stdlib/utils-inherited-writable-property-symbolsAlternatively,
- To load the package in a website via a
scripttag without installation and bundlers, use the ES Module available on theesmbranch. - If you are using Deno, visit the
denobranch. - For use in Observable, or in browser/node environments, use the Universal Module Definition (UMD) build available on the
umdbranch.
The branches.md file summarizes the available branches and displays a diagram illustrating their relationships.
var inheritedWritablePropertySymbols = require( '@stdlib/utils-inherited-writable-property-symbols' );Returns an array of an object's inherited writable symbol properties.
var defineProperty = require( '@stdlib/utils-define-property' ); var hasSymbolSupport = require( '@stdlib/assert-has-symbol-support' ); var Symbol = require( '@stdlib/symbol-ctor' ); var hasSymbols = hasSymbolSupport(); var symbols; var f; function Foo() { if ( hasSymbols ) { defineProperty( this, Symbol( 'a' ), { 'configurable': false, 'enumerable': false, 'writable': true, 'value': 'a' }); } return this; } if ( hasSymbols ) { defineProperty( Foo.prototype, Symbol( 'b' ), { 'configurable': false, 'enumerable': false, 'writable': true, 'value': 'b' }); } f = new Foo(); symbols = inheritedWritablePropertySymbols( f );By default, the function walks an object's entire prototype chain. To limit the inheritance level, provide a level argument.
var symbols = inheritedWritablePropertySymbols( [], 1 );- Property order is not guaranteed, as
objectproperty enumeration is not specified according to the ECMAScript specification. In practice, however, most engines use insertion order to sort anobject's properties, thus allowing for deterministic extraction.
var defineProperty = require( '@stdlib/utils-define-property' ); var hasSymbolSupport = require( '@stdlib/assert-has-symbol-support' ); var Symbol = require( '@stdlib/symbol-ctor' ); var inheritedWritablePropertySymbols = require( '@stdlib/utils-inherited-writable-property-symbols' ); var hasSymbols = hasSymbolSupport(); var symbols; var obj; function Foo() { this.a = 'a'; defineProperty( this, 'b', { 'configurable': false, 'enumerable': false, 'writable': false, 'value': 'b' }); if ( hasSymbols ) { this[ Symbol( 'a' ) ] = 'a'; defineProperty( this, Symbol( 'b' ), { 'configurable': false, 'enumerable': false, 'writable': false, 'value': 'b' }); } return this; } Foo.prototype.c = 'c'; defineProperty( Foo.prototype, 'd', { 'configurable': false, 'enumerable': false, 'writable': false, 'value': 'd' }); if ( hasSymbols ) { Foo.prototype[ Symbol( 'c' ) ] = 'c'; defineProperty( Foo.prototype, Symbol( 'd' ), { 'configurable': false, 'enumerable': false, 'writable': false, 'value': 'd' }); } obj = new Foo(); symbols = inheritedWritablePropertySymbols( obj ); console.log( symbols );@stdlib/utils/inherited-writable-property-names: return an array of an object's inherited writable property names.@stdlib/utils/writable-property-symbols: return an array of an object's own writable symbol properties.@stdlib/utils/writable-property-symbols-in: return an array of an object's own and inherited writable symbol properties.@stdlib/utils/properties: return an array of an object's own enumerable and non-enumerable property names and symbols.
This package is part of stdlib, a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more.
For more information on the project, filing bug reports and feature requests, and guidance on how to develop stdlib, see the main project repository.
See LICENSE.
Copyright © 2016-2022. The Stdlib Authors.