MDN说它是“an Array like object”,但没有说出它的实例是什么。
不是HTMLCollection
或NodeList
。
如果我致电Object.prototype.toString.call(arguments)
,则会返回"[object Arguments]"
,但arguments instanceof Arguments
是错误。
那么arguments
的实例是什么?
答案 0 :(得分:7)
那么参数是什么?
这是Object
的一个实例。似乎没有任何公共Arguments
构造函数可以与instanceof
一起使用来识别它。
如果您想要唯一识别它,那么:
Object.prototype.toString.call(arguments) === "[object Arguments]"
是识别它的安全方式。
Per section 9.4.4 in the EcmaScript 6 specification,arguments
对象是普通对象或异国对象。这是规范所说的:
大多数ECMAScript函数都会为其提供参数对象 码。根据功能定义的特征, 它的参数对象是普通对象或参数 异国情调的对象。
充满异国情调的论点 object是一个奇特的对象,其数组索引属性映射到 形式参数绑定其关联的调用 ECMAScript函数。
参数奇异物体具有相同的内部 插槽作为普通对象。它们内部也有[[ParameterMap]] 插槽。普通参数对象也有[[ParameterMap]]内部 槽的值始终未定义。对于普通的参数对象 [[ParameterMap]]内部插槽仅用于 Object.prototype.toString(19.1.3.6)来识别它们。
由于它是一个“异国情调”的对象,这实际上意味着它不遵循所有正常和预期的约定。例如,没有构造函数可以从中创建自己的对象。并且,因为没有公共构造函数,这可能也解释了为什么没有instanceof
可以对其进行测试以唯一地识别它。
答案 1 :(得分:0)
您可以使用arguments
callee.name
的函数的名称
function test() {
this.args = arguments;
}
var obj = new test();
console.log(obj.args.callee.name);
function test() {
return arguments
}
console.log(test().callee.name);
另请参阅Why was the arguments.callee.caller property deprecated in JavaScript?,Arguments object