首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是JavaScript中对象的“内部槽”?

什么是JavaScript中对象的“内部槽”?
EN

Stack Overflow用户
提问于 2015-10-12 15:15:32
回答 2查看 3.3K关注 0票数 23

我试着在一点上理解ECMAScript 2015规范:Internal Slots of Objects。但这一节对我来说似乎非常不清楚,特别是这句话:

内部插槽对应于与对象关联并由各种ECMAScript规范算法使用的内部状态。

(它使用了正确的语法吗?)有人能用英语解释这个概念吗?

到目前为止我能理解的是:

在创建对象期间使用properties

  • internal插槽,但不将其添加到对象中。itself

  • internal插槽是或具有值,最初为undefined

  • 内部插槽不是对象插槽
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-12 20:54:21

摘要

内部插槽/方法是规范用来定义所需行为的伪属性/ -methods。(“抽象操作”是规范的相关机制。)槽代表状态(值),方法描述算法(行为)。它们可能对应于引擎使用的对象的属性,也可能不对应于引擎使用的对象的属性,但用户代码不能使用它们,除非由公共API的某些部分公开。引擎使用的实际实现可能与内部方法勾勒出的非常不同,但为了符合要求,它们必须产生与内部方法一致的行为或结果。

示例

[[StringData]]内部插槽

String的行为,例如new String("whatever"),以包括表示值的[[StringData]]内部槽(在本例中为whatever)的术语来描述。用户代码不能直接访问内部插槽,但String.prototype.toString() (例如(new String("whatever")).toString())是根据thisStringValue()抽象操作定义的,该抽象操作通过返回[[StringData]]的值来描述。所以换句话说,String.prototype.toString()是一个公开[[StringData]]的getter。

[[OwnPropertyKeys]]内部方法

使用包括调用[[OwnPropertyKeys]]内部方法在内的术语来描述Object.keys()的行为。注意,不同种类的对象,例如普通对象(例如Object)和奇异对象(例如String)可能具有不同的[[OwnPropertyKeys]]定义。当在规范中“调用”[[OwnPropertyKeys]]时,它指的是适用类型的定义。对于任何对象类型,还有一些适用于其定义的invariant特征。

票数 23
EN

Stack Overflow用户

发布于 2015-10-12 16:09:30

它只是用来精确描述对象应该如何行为的一种手段。

它们不是对象的真正成员,即使在某些实现中它们是,您也不能使用可移植代码访问它们。

换句话说,这是一种编写规范的方法,允许使用命令性代码描述行为,这种代码在形式上比仅仅使用冗长的“自然语言”描述行为应该是什么更加精确。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33075262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档