2016-10-01 9 views
2

저에게 원하는 것은 무엇입니까? 어떻게 작동 시키는가?TypeError : 'ownKeys'on proxy : 트랩 결과에 'arguments'가 포함되지 않았습니다.

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)) 

그것은 오류를 인쇄하지만 안 :

[email protected]:~/tst$ node --version 
v6.2.2 
[email protected]:~/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 

이 버그인가요? 그렇다면 어디에서 제출할 수 있습니까?

+1

을 당신이 불변 깨고 생각 - 모든 기능을해야합니다 '.arguments' 속성을 가지고 있지만 당신의 속성은 없습니다. 'getOwnPropertyNames'를 호출 할 때 이것이 나타나는 이유는 무엇입니까? 나는 모른다. – Bergi

답변

2

이것은 버그가 아닙니다. 이 동작은 ownKeys, 단계 17a에 대해 proxy spec에 의해 정의됩니다. 일반 영어로, 실제 target의 비 구성 속성 때문에 특별히 arguments이 예에서 누락 ownKeys에 의해 반환되는 속성 목록에서 발생합니다

> Object.getOwnPropertyDescriptor(target, "arguments") 
Object {value: null, writable: false, enumerable: false, configurable: false} 
+0

즉,'arguments','caller' 및'prototype'이라는 구성 가능한 속성을 가진 함수의 프록시를 만들 수 없다는 것을 의미합니다. 왜냐하면이 이름들은 구성 할 수없는 것으로 하드 코딩 되었기 때문입니다. 이 올바른지? – user619271

+1

예, 프록시 트랩의 결과 목록에서이를 생략 할 수 없습니다. – jmrk