2013-02-13 5 views
8

JavaScript에는 Object.defineProperty이있는 getters가 있습니다. 그래서JavaScript에서 Universal/Fallback getter 속성을 정의하십시오.

Object.defineProperty(window, 'random', { 
    get: function() { 
     return Math.random(); 
    } 
}); 

random // Evaluates to a random number 

에 의해 window의 재산 random에 게터를 정의 할 수 있습니다에 관계없이 객체 속성의 특정 개체에 대한 "보편적 게터"를 정의 할 수 있습니까?

Object.universalGetter(window, function (propertyName) { 
    console.log('Accessing property', propertyName, 'of window.'); 
}); 

window.Function // Prints "Accessing property Function of window." 

"universal getters"를 (를) JavaScript로 사용할 수 있습니까?

+0

가능한 중복이 가능하다 JavaScript에서 동적 getters/setters 구현?] (http://stackoverflow.com/questions/7891937/is-it-possible-to-implement-dynamic-getters-setters-in-javascript) – user123444555621

+1

참조 http : // stackoverflow .com/questions/2266789/is-there-an-the-nosuchmethod-features-for-a-way – user123444555621

답변

4

번호

이 작업에 대한 규정이없는 로 인 ECMAScript 5 판에서 할 수 없습니다. 명시 적으로 언급하지는 않았지만 [GetProperty]은 존재하지 않는 속성에 대한 조항을 만들지 않습니다.

게터는/ECMAScript를 의 손님들은 기존의 속성을 필요로하고 루비의 method_missing 파이썬의 __getattribute__의 동등한은 없다.

10

불행히도 : 아니요, 없습니다.

Proxy

(function (original, Window) { 
    var handler = { 
    get: function (target, propertyName) { 
     console.log('Accessing property', propertyName, 'of window.'); 
     return target[propertyName]; 
    } 
    }; 

    Window = new Proxy(original, handler); 


    console.log(Window.setTimeout); 
    // "Accessing property" 
    // "setTimeout" 
    // "of window." 

    // function setTimeout() { 
    // [native code] 
    // } 
})(window); 

등의 작업을 수행 할 수 있도록 할 기반 브라우저

게코 (18)에 도입 객체 그러나 이것은 매우 불안정 아직도 표준 및 입니다있다라고 somehthing한다

Btw 원래 IIFE에서 로컬 변수로 window을 직접 사용할 수 있다고 생각했지만 실제로는 그렇지 않습니다. 그것이 바로 정의되지 않은 로그 (왜 궁금) 내가 JSBin

참고

을 Heres 예를 들어은 "W"대문자 : 당신은 파이어 폭스에를 방문해야

[의
+1

['Proxy'] (https : //developer.mozilla. org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)가 현재 표준이며 ES2015의 일부로 구현되고 있습니다 – CletusW

관련 문제