मैंने पिछले 10 वर्षों में यहां 10 या 20 मिनट बिताए हैं और संभवत: एक दर्जन बार और इस प्रश्न के बुलेटप्रूफ जवाब को कभी नहीं मिला है।आप कैसे जांचते हैं कि कोई जावास्क्रिप्ट ऑब्जेक्ट सीधे `{}` उदाहरण है, उप-वर्ग नहीं है?
आप कैसे जांचते हैं कि जावास्क्रिप्ट ऑब्जेक्ट Object
का उदाहरण है, उप-वर्ग नहीं है?
इसके लिए एक उपयोग केस यह जांचना है कि arguments[0]
एक "विकल्प" हैश बनाम एक "मॉडल" (एमवीसी) है, जिसमें से दोनों मूल Object
का विस्तार करते हैं, लेकिन इसका अलग-अलग व्यवहार किया जाना चाहिए।
मैं इन की कोशिश की है:
// some helper to get constructor name
function klassName(fn) {
if (fn.__name__) {
return fn.__name__;
}
if (fn.name) {
return fn.name;
}
return fn.toString().match(/\W*function\s+([\w\$]+)\(/));
};
var Model = function() {};
m = new Model;
o = {};
Object(o) === o; // true
Object(m) === m; // true, thought it might be false
klassName(o.constructor); // Object
klassName(m.constructor); // Model
klassName(m.constructor)
कि कुछ मामलों में काम नहीं करता है (वास्तव में याद नहीं कर सकते, लेकिन शायद एक regex.constructor, ऐसा ही कुछ)। शायद यह करता है, निश्चित रूप से पता नहीं है।
क्या कोई बुलेटप्रूफ तरीका है यह बताने के लिए कि {}
ऑब्जेक्ट है या नहीं?
जावास्क्रिप्ट कुछ भी नहीं में बुलेटप्रूफ है। 'बुलेटप्रूफ' भी काम नहीं करता है। :) –
बीटीडब्ल्यू - जावास्क्रिप्ट में ** subclass ** प्रति-सी नहीं है। केवल कन्स्ट्रक्टर फ़ंक्शन और प्रोटोटाइप। – gnarf