Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is "accessor function"?

Tags:

javascript

In section 4.3.26 of the Standard ECMA-262 Edition:

Depending upon the form of the property the value may be represented either directly as a data value (a primitive value, an object, or a function object) or indirectly by a pair of accessor functions.

I didn't understand what "accessor function" means and I didn't find the definition of accessor function in the specification. Then I searched the web. It seemed to me that accessor function means "getter". But I still don't understand, why is the property the value be represented "by a pair of accessor functions"? Can anyone illustrate this with example(s)? Thanks!

like image 355
user159 Avatar asked Jun 25 '26 09:06

user159


2 Answers

"A pair of accessor functions" are the getter and the setter.

Documentation and example:

var o = {}; // Creates a new object

// Example of an object property added with defineProperty with an accessor property descriptor
var bValue = 38;
Object.defineProperty(o, 'b', {
  get: function() { return bValue; },
  set: function(newValue) { bValue = newValue; },
  enumerable: true,
  configurable: true
});
like image 121
lexicore Avatar answered Jun 26 '26 21:06

lexicore


An accessor property is one that is defined in terms of getters and setters, not as a stored value that might be written to. The "pair of accessor functions" denotes the getter and the setter function.

More information on this can be found in section §8.6:

An Object is a collection of properties. Each property is either a named data property, a named accessor property, or an internal property:

  • A named data property associates a name with an ECMAScript language value and a set of Boolean attributes.
  • A named accessor property associates a name with one or two accessor functions, and a set of Boolean attributes. The accessor functions are used to store or retrieve an ECMAScript language value that is associated with the property.
  • An internal property has no name and is not directly accessible via ECMAScript language operators. Internal properties exist purely for specification purposes.

and Section § 8.6.1:

A named accessor property associates a name with the attributes listed in the following table:

Attribute| Value     | Description
 Name    |  Domain   |
---------+-----------|---------------------------------------------------------
[[Get]]  | Object or | If the value is an Object it must be a function Object.
         | Undefined | The function’s [[Call]] internal method (8.6.2) is
         |           | called with an empty arguments list to return the
         |           | property value each time a get access of the property is 
         |           | performed.
         |           |
[[Set]]  | Object or | If the value is an Object it must be a function Object.
         | Undefined | The function’s [[Call]] internal method (8.6.2) is
         |           | called with an arguments list containing the assigned
         |           | value as its sole argument each time a set access of the
         |           | property is performed. The effect of a property's
         |           | [[Set]] internal method may, but is not required to,
         |           | have an effect on the value returned by subsequent calls
         |           | to the property's [[Get]] internal method.
         |           |
[[Enume- | Boolean   | If true, the property is to be enumerated by a for-in
 rable]] |           | enumeration (see 12.6.4). Otherwise, the property is
         |           | said to be non-enumerable.
         |           |
[[Confi- | Boolean   | If false, attempts to delete the property, change the
gurable]]|           | property to be a data property, or change its attributes
         |           | will fail.
like image 30
Bergi Avatar answered Jun 26 '26 21:06

Bergi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!