2014-01-12 3 views
2

존재하지 않는 함수를 호출 할 때 호출되는 폴백 콜백을 설정할 수 있습니까? 예 :사용할 수없는 함수를 호출 할 때 대체 콜백

my_object.ThisFunctionDoesNotExists(2, 4); 

이제 인수가 전달 된 첫 번째 매개 변수가 이름과 스택 (또는 이와 비슷한 것) 인 곳으로 함수가 호출되기를 바랍니다. 명확하게하기 위해 폴백 콜백은 C++ 함수 여야합니다. 이 기능을 사용하려면

var A = Proxy.create({ 
    get: function (proxy, name) { 
     return function (param) { 
      console.log(name, param); 
     } 
    } 
}); 

A.hello('world'); // hello world 

사용 --harmony_proxies PARAM : 귀하의 질문에 가정

답변

1

에 대한 태그로부터 추론되는 V8 엔진을 내장되어, 당신은 조화 프록시 기능을 사용할 수 있습니다.

static const char v8_flags[] = "--harmony_proxies"; 
v8::V8::SetFlagsFromString(v8_flags, sizeof(v8_flags) - 1); 

다른 방법 : C++ 코드에서

그래서 당신은 속성 액세스를 차단할 수 있도록 SetNamedPropertyHandler라고 v8::ObjectTemplate의 방법이있다. 예를 들면 다음과 같습니다.

void GetterCallback(v8::Local<v8::String> property, 
    const v8::PropertyCallbackInfo<v8::Value>& info) 
{ 
    // This will be called on property read 
    // You can return function here to call it 
} 
... 

object_template->SetNamedPropertyHandler(GetterCallback); 
+0

감사합니다. C++에서와 똑같은 동작을 원합니다. 그래서 "proxy"-function은 C++ fallback을 호출해야합니다. 나의 나쁜 묘사를 유감스럽게 생각한다. –

+0

내 대답이 업데이트되었습니다. 조화 프록시 없이도이 작업을 수행 할 수 있습니다. – iefserge

관련 문제