- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
“receiver”和“target”在 ES2015 规范(参见下面的示例)和 Web 的其他地方都使用,指代用作 this
值的对象。
这些词是同义词还是它们具有微妙的不同含义?
是否有一个正确的术语来指代函数在调用时的 this
值?
我注意到 26.1.6 中 Reflect.get
的签名使用这两个术语表示含义不同。
这个问题源于 ES2015 规范中的命名不一致。
规范用法示例:
表 5,第 7 行([[Get]]
),部分 6.1.7.2 (我的底气):
Return the value of the property whose key is propertyKey from this object. If any ECMAScript code must be executed to retrieve the property value, Receiver is used as the this value when evaluating the code.
第 2 段,第 6.1.7.2 (我的底气):
Internal method names are polymorphic. This means that different object values may perform different algorithms when a common internal method name is invoked upon them. That actual object upon which an internal method is invoked is the “target” of the invocation. If, at runtime, the implementation of an algorithm attempts to use an internal method of an object that the object does not support, a TypeError exception is thrown.
最佳答案
回顾一下:
对对象内部方法的每次调用都有一个“目标”,即调用对象。
"Receiver"是 [[Get]]
方法的第二个nd 参数,以及[[Set]]
方法。
其他 internal object methods没有这个额外的参数。
那么,为什么[[Get]]
和[[Set]]
会有Receiver呢?因为它不是目标。
Receiver用于调用[[Get]]/[[Set]]范围内的getter和setter。
ES6 9.1.8 :
A.Get( 'property', A )
A.prototype.Get( 'property', A )
。
Note that ES5's [[Get]] (8.12.3) do the same in a different way and without Receiver, partially because prototype climbing happens in another part (8.12.2).
Receiver 仅存在于 [[Get]] 和 [[Set]] 的上下文中,并且服务于与 target 不同的目的。
当[[Get]]需要引用它的目标时,它使用O。
O 对于 [[Get]] 的每个递归调用都是不同的,因为它爬上了原型(prototype)链。
Receiver 与 [[Get]] 一样爬上原型(prototype)链。它的值作为参数传递给getter,接下来发生的事情不再与Receiver在同一个范围内。
O and Receiver may refer to the same object, but that doesn't matter in the context of [[Get]] or [[Set]]. In fact, Reflect.get allows the caller to set a different target and Receiver and make them different from the get go.
对于其他的对象内部方法,大部分根本不爬原型(prototype)链。执行此操作的两个([[HasProperty]]
和 [[Enumerate]]
)不需要保留初始目标(可以这么说)。
解决了这个问题,你then ask规范是否为“Receiver”赋予了在一般 JavaScript 讨论中使用的含义,例如它如何在 6.1.7.2 中定义“target”。这个答案是否定的。
“Receiver”的范围非常狭窄,仅用作参数名称,但“target”在那里以一般的、不太正式的方式使用。
“目标”是从一般性讨论中借用的术语 -ES5 没有定义调用目标的概念。ES5“目标”可以是参数、变量、语句、表达式或被调用的函数。但不是 this
的隐式替换。
编写该规范是为了以非常非常精确的术语传达“JavaScript 行为”,使其非常技术化,包括参数的使用。它只是提供与一般编程讨论不同的交流方式。
3.a.许多 JS 开发人员根本不阅读规范。 对于日常编码来说是不必要的。
3.b.我们谈论“闭包”、“范围链”、“事件队列”和“粗箭头”或“lambda”,不是吗?规范没有定义这些术语。
3.c.规范可能会以不同的方式命名事物,如在执行上下文或作业队列中。
它可能根本不命名事物。关闭是一种紧急行为。
当它命名时,它不会创建别名。箭头函数从不称为 lambda。
规范不规范一般性讨论。
使用常识进行共同讨论。
关于javascript - "target"和 "receiver"是 ES2015 规范中的同义词吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37644517/
我有一个 div,我希望使用 css 显示为 :target。到目前为止,这工作正常。我的问题是:我希望它淡入淡出。 我的代码: Content #stuff { opacity:0;
我想找到在Rust构建中使用的libc.so文件,以便我可以使用--version进行查询。 (一些libcs通过C宏公开其版本信息,因此,它们的另一种选择是在构建脚本中使用cc条板箱。但其他诸如
我仍然不明白为什么 Makefile 中的“虚假”规则将“.PHONY”作为其目标。作为先决条件,这会更合乎逻辑。 我需要详细说明这一点吗?如果A依赖于B并且B是假的,那么A也是假的。因此,与 .PH
在 Fortran 语言中,向具有 TARGET 属性的虚拟参数的过程提供不具有 TARGET 属性的参数应该会导致无效代码。但是,当使用 gfortran (5.1.0) 或 ifort (14.0
如果有人发布过相同的问题,请原谅我,我找不到类似问题的答案。 当我单击带有 #dotNetComponents url 的按钮时,它会将我带到带有 dotNetComponents ID 的 div,
我想用 :target 伪类更改我的 html 中元素的样式。我的标记(第一个是按钮,第二个是目标元素): Call to action target CSS: #btn01:target { b
下面提到的示例代码是 Keith Wood 的 jQuery Countdown 插件的一部分。有人能解释一下吗 _attachCountdown: function(target, options)
我是 React 的新手。这绝对让我感到困惑。我可以使用 event.target 访问 HTML 元素,它显示的值等于某个数字,但每次我使用 event.target.value 时,我都会得到 u
这个问题是关于交叉编译的。 使用 swift 编译器的 -target 或 -target-cpu 选项可以使用哪些不同的目标?我在哪里可以找到概述? 它只能用于创建 iOS/watchOS 应用程序
在CKEditor 5中,我没有在链接对话框中看到目标属性的字段。 如何添加这样的字段?或将target = _blank设置为默认值。 谢谢 最佳答案 从Link Plugin的11.1.0版本开始
问题:FAKE 中是否有一个命令可以打印构建脚本中所有定义的目标? 我想以这样的方式设置我的 FAKE 构建:当我不指定目标时,它会打印构建脚本中所有可用目标的列表。 例如: > build.cmd
尝试使用 Visual Studio 2013 Update 3 创建一个新的 Cordova“空白应用程序”。 我看到了模板,但是当尝试打开空白应用程序时,我得到: The imported pro
http://download.oracle.com/javase/6/docs/api/java/lang/annotation/Target.html 此元注释指示声明的类型仅用作复杂注释类型声明
使用CocoaPods,有什么区别 target :TargetName do # Some pods... end 和 target "TargetName" do #
我正在尝试仅使用 CSS 制作一个简单的移动菜单切换。通过显示和隐藏两个按钮,这些按钮具有指向显示或隐藏导航菜单的类的不同链接。 是本教程的编辑link ,但现在我想让关闭和打开按钮位于单独的 div
以下是包含简单日志文件目标的简单 nlog 配置。我的问题是如何为 Nlog.Targets.Redis 添加目标? 最佳答案 以下是 NLog.Targets.Redis 的正确配置。如果
我想知道您是否可以将一个单元测试包链接到多个目标。因此,可以使用一个测试包测试所有应用程序目标。 我在所有应用程序目标之间有一些共享代码,但也有一些基于正在运行的应用程序目标的特定计算。 目前,如果我
我在 VSTS 中使用部署组将我的应用程序部署到本地测试 Web 服务器。 它已经运行良好很长时间了,但是在大约 6 周没有使用它之后,我现在遇到了这个错误,我想修复它; 最佳答案 您的代理未运行或无
使用 CMake 构建开源项目时(在我的例子中,它是柠檬图库),当我尝试通过 -DBUILD_SHARED_LIBS=1 构建共享库时出现此错误。 : TARGETS given no LIBRARY
尝试安装 ionic,添加 android 平台时出现以下错误 Error: Please install Android target "android-19". Hint: Run "androi
我是一名优秀的程序员,十分优秀!