本文介绍了类型错误:代理上的“ownKeys":陷阱结果不包括“参数"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
它要我做什么?如何让它发挥作用?
What do it wants from me? How to make it work?
var proxy_handler =
{
ownKeys: function(target)
{
return Object.keys(target.data)
},
}
var proxxxy = function(initial_data)
{
var return_value = "Goodbye world"
var target = function() { return return_value }
if(typeof initial_data == "undefined")
{
target.data = {}
}
else
{
target.data = initial_data
}
return new Proxy(target, proxy_handler)
}
var p = proxxxy({q:"aaa",w:"bbb",f:"ccc"})
console.log(p())
console.log(Object.getOwnPropertyNames(p))
它打印了一个错误,但它不应该:
It prints an error but it shouldn't:
me@me:~/tst$ node --version
v6.2.2
me@me:~/tst$ node test3.js
Goodbye world
/home/me/tst/test3.js:26
console.log(Object.getOwnPropertyNames(p))
^
TypeError: 'ownKeys' on proxy: trap result did not include 'arguments'
at Object.<anonymous> (/home/me/tst/test3.js:26:24)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.runMain (module.js:575:10)
at run (node.js:348:7)
at startup (node.js:140:9)
at node.js:463:3
这是一个错误吗?如果是这样 - 我可以在哪里提交?
Is this a bug? If so - where I can submit it?
推荐答案
这不是错误;此行为由 代理定义ownKeys
的规范,步骤 17a.简单来说,实际target
的任何不可配置的属性都必须出现在ownKeys
返回的属性列表中,因此缺少arguments
在您的示例中:
This is not a bug; this behavior is defined by the proxy spec for ownKeys
, step 17a. In plain English, any non-configurable property of the actual target
must occur in the list of properties returned by ownKeys
, so specifically arguments
is missing in your example:
> Object.getOwnPropertyDescriptor(target, "arguments")
Object {value: null, writable: false, enumerable: false, configurable: false}
这篇关于类型错误:代理上的“ownKeys":陷阱结果不包括“参数"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!