名称访问器属性仅与getter和setter有关

时间:2015-07-31 17:42:14

标签: javascript encapsulation

访问器属性将键值与一个或两个访问器函数以及一组布尔属性相关联。访问器函数用于存储或检索与该属性关联的ECMAScript语言值。

以上是ecmascript规范第6版。

因为javascript中的所有内容都是对象,并且所有javascript属性都被命名为数据属性(Ndps)(据我所知)...并且作为Getters和Setter的命名访问器属性(Naps)比Nets更多地是Naps而不是getters和二传手。而对Ndp的检索是否直接来自j8引擎,如v8或更多关于它在更高层次上的实现?

示例代码:

var stuff = { 'stuff1': 1, 'stuff2': 2 }    // stuff as an Object

stuff.stuff1 // returns 1

Object.defineProperty(stuff, 'stuff3', {
    // defining stuff3's property attributes
    get: function() { return 'Hey! This is from the getter function'}
    enumerable: true,
    configurable: true
})

stuff.stuff1 // returns but how does it

stuff.stuff3 // returns and i know how because it was defined.

stuff的操作还有其他实现吗?

请注意其他参考资料或链接。

2 个答案:

答案 0 :(得分:1)

除了GET或SET之外,没有什么可以用属性做什么,因为那是什么东西起作用(原谅双关语)。访问器功能提供了这样做的方法,但更重要的是,它们为您提供了一种控制如何的方法。例如,GET功能可能要求您已登录或具有某些访问权限。 SET函数可能会阻止您设置负值,或者只允许登录用户使用它,将事务记录到文件等。

答案 1 :(得分:1)

虽然这个问题很模糊,但我会先理解它,然后回答它。

  

基本属性(例如{a: 1}.a)是否具有Object.defineProperty(obj, 'a', {get: function() { return 1 }});的描述符或类似的内部机制?

在V8中,是的。基本属性的描述符等同于{writable: true, enumerable: true, configurable: true}

$ node
> var obj1 = {a: 1}
undefined
> Object.getOwnPropertyDescriptor(obj1, 'a')
{ value: 1, writable: true, enumerable: true, configurable: true }

ECMAScript标准讨论了标准语言特定部分的描述符。至少在EC5 section 8.10

  

属性描述符类型用于解释命名属性属性的操作和具体化。属性描述符类型的值是由命名字段组成的记录,其中每个字段的名称是属性名称,其值是8.6.1中指定的相应属性值。

并且section 8.6.1声明:

  

本规范中使用了属性来定义和解释命名属性的状态。

这几乎证实了描述符只存在于Object.defineProperty函数之外,并且是定义属性访问的核心。

我倾向于相信存储值的实际位置内存 - 常规与明确Object.defineProperty'd - 是特定于实现的(即 from where >它实际上拉的值没有在规范中说明。