2016-09-02 5 views
10

मैं दिए गए कुंजी की i18n स्ट्रिंग प्राप्त करने के लिए निम्न तर्क का उपयोग कर रहा हूं।मैं निम्नलिखित तर्क में ऑब्जेक्ट.प्रोटोटाइप विधि का उपयोग कैसे करूं?

export function i18n(key) { 
    if (entries.hasOwnProperty(key)) { 
    return entries[key]; 
    } else if (typeof (Canadarm) !== 'undefined') { 
    try { 
     throw Error(); 
    } catch (e) { 
     Canadarm.error(entries['dataBuildI18nString'] + key, e); 
    } 
    } 
    return entries[key]; 
} 

मैं अपनी परियोजना में ईएसलिंट का उपयोग कर रहा हूं। मुझे निम्न त्रुटि मिल रही है:

Do not access Object.prototype method 'hasOwnProperty' from target object. It is a 'no-prototype-builtins' error.

इस त्रुटि को हल करने के लिए मैं अपना कोड कैसे बदलूं? मैं इस नियम को अक्षम नहीं करना चाहता हूं।

+3

आपको शायद दस्तावेज़ों को पढ़ना चाहिए। * सही * कोड ~ उदाहरण हैं http://eslint.org/docs/rules/no-prototype-builtins – Phil

+1

आपको 'ऑब्जेक्ट.hasOwnProperty (प्रविष्टियां, कुंजी)' का उपयोग करने के लिए सुझाव देते हैं? – passion

+1

मैं इस प्रश्न को ऑफ-विषय के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि इसका उत्तर दस्तावेज़ में दिया गया है (tl: dr ~ RTFM) – Phil

उत्तर

22

आप Object.prototype द्वारा ही पहुंच सकते हैं:

Object.prototype.hasOwnProperty.call(obj, prop); 

कि सुरक्षित किया जाना चाहिए, क्योंकि

  • नहीं सभी वस्तुओं Object.prototype
  • से विरासत यहां तक ​​कि जिन वस्तुओं पर Object.prototype से विरासत के लिए, hasOwnProperty विधि किसी और चीज से छायांकित किया जा सकता है।
बेशक

, कोड ऊपर मानता है कि

  • वैश्विक Object छाया नहीं किया गया है या नए सिरे से परिभाषित
  • देशी Object.prototype.hasOwnProperty नए सिरे से परिभाषित नहीं किया गया है
  • नहीं call अपनी संपत्ति में जोड़ा गया है Object.prototype.hasOwnProperty
  • देशी Function.prototype.call को फिर से परिभाषित नहीं किया गया है

यदि इनमें से कोई भी पकड़ नहीं है, तो एक सुरक्षित तरीके से कोड करने का प्रयास कर, आप अपना कोड तोड़ सकते थे!

एक और दृष्टिकोण जो call की जरूरत नहीं है

!!Object.getOwnPropertyDescriptor(obj, prop); 
2

होगा यह इस तरह लगता है भी काम करेगा:

key in entries

कि चूंकि या नहीं, कुंजी मौजूद है पर एक बूलियन वापस आ जाएगी वस्तु के अंदर?

+0

'hasOwnProperty' जांचता है कि कोई स्ट्रिंग या प्रतीक अपनी संपत्ति है या नहीं। 'प्रविष्टियों में कुंजी' चेक करता है अगर यह स्वयं या विरासत में है। – Oriol

संबंधित मुद्दे