2013-02-13 17 views
8

में एक सार्वभौमिक/फ़ॉलबैक गेटर संपत्ति को परिभाषित करें Object.defineProperty के साथ जावास्क्रिप्ट में गेटर्स हैं। तो मैं द्वाराजावास्क्रिप्ट

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." 

क्या मैं जावास्क्रिप्ट में "सार्वभौमिक गेटर्स" कर सकता हूं?

+0

की [संभव डुप्लिकेट यह संभव करने के लिए है जावास्क्रिप्ट में गतिशील गेटर्स/सेटर्स लागू करें?] (http://stackoverflow.com/questions/7891937/is-it-possible-to-implement- गतिशील-getters-setters-in-javascript) – user123444555621

+1

यह भी देखें http: // stackoverflow .com/प्रश्न/2266789/is-there-an-equal-of-nosuchmethod-feature-for-Properties-or-a-way – user123444555621

उत्तर

4

सं

यह इस कार्रवाई के लिए कोई प्रावधान नहीं है के रूप में ECMAScript 5 वीं संस्करण में क्या करना संभव नहीं है। जबकि इस तरह के स्पष्ट कहा गया है नहीं है, यह देखा जा सकता है कि [GetProperty] गैर मौजूदा संपत्तियों के लिए किसी भी प्रावधान नहीं है।

getters/ECMAScript में setters मौजूदा गुण की आवश्यकता होती है और वहाँ रूबी के 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 है

बीटीडब्ल्यू मैंने मूल रूप से सोचा था कि आप आईआईएफई में स्थानीय चर के रूप में सीधे window का उपयोग कर सकते हैं लेकिन ऐसा लगता है कि आप नहीं कर सकते यह सिर्फ अपरिभाषित लॉग (क्यों सोच) तो मैं पर JSBin

नोट "W"

यहाँ एक उदाहरण है पूंजीकृत: आप Firefox में यह यात्रा करनी चाहिए

+1

['प्रॉक्सी'] (https: //developer.mozilla। संगठन/एन-यूएस/डॉक्स/वेब/जावास्क्रिप्ट/संदर्भ/ग्लोबल_ऑब्जेक्ट्स/प्रॉक्सी) अब मानक है और ES2015 के हिस्से के रूप में कार्यान्वित किया जा रहा है – CletusW