سؤال

النظر في مثال JavaScript التالي:

var myobj = {   func1: function() { alert(name in this) },
                func2: function() { alert(name in this) },
                func3: function() { alert(name in this) }
}

myobj.func2(); // returns true
myobj.func4(); // undefined function

هل من الممكن إنشاء مفتاح "catch-all" myobj سيتم استدعاء ذلك إذا لم يكن هناك مفتاح/وظيفة محددة (كما في func4()) مع الاحتفاظ myobj.functionCall() صيغة؟

هل كانت مفيدة؟

المحلول

أنت تبحث عن __noSuchMethod__:
JavaScript Getter لجميع الخصائص

نصائح أخرى

يمكنك إنشاء كائن JavaScript مع مفاتيح "Wildcard" أو "Catch-All" باستخدام وكيل ودالة getter. على عكس الحلول المقدمة ، يجب أن يعمل الوكيل في أي بيئة تقريبًا ، بما في ذلك node.js

var foo = new Object()

var specialFoo = new Proxy(foo, {
    get(target,name) {
        // do something here
        return name
    }
})

console.log(specialFoo.blabla) // this will output "blabla"

إذا كنت تريد أن تكون الخصائص قابلة للاتصال ، فما عليك سوى إرجاع وظيفة:

var specialFoo = new Proxy(foo, {
    get(target,name) {
        return function() {
            console.log('derp')
            return name
        }
    }
})


specialFoo.callMe() // this will print derp

تفاصيل: وثائق على موزيلا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top