2016-09-02 9 views
10

Verilen anahtarın i18n dizesini almak için aşağıdaki mantığı kullanıyorum.Aşağıdaki mantıkta Object.prototype yöntemine nasıl erişirim?

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]; 
} 

Projemde ESLint kullanıyorum. Aşağıdaki hatayı alıyorum: Bu hatayı gidermek için kodumu nasıl değiştirebilirim? Bu kuralı devre dışı bırakmak istemiyorum.

+3

Büyük olasılıkla belgeleri okumalısınız. * Doğru * kod örnekleri vardır: http://eslint.org/docs/rules/no-prototype-builtins – Phil

+1

'Object.hasOwnProperty (girişler, anahtar)' kullanmak için önermek? – passion

+1

Bu soruyu off-topic olarak kapatmak için oy veriyorum çünkü dokümanlardaki yanıt (tl: dr ~ RTFM) – Phil

cevap

22

Sen Object.prototype üzerinden erişebilirsiniz: daha güvenli olmalıdır

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

,

  • Tüm nesneler Object.prototype
  • devralan çünkü Hatta Object.prototype devralan nesneler için, hasOwnProperty yöntemi başka bir şey tarafından gölgelenebilir. Tabii

, kod yukarıdaki

  • küresel Object gölgeli veya yeniden edilmemiştir varsayar
  • yerli Object.prototype.hasOwnProperty
  • No call kendi mülkiyet eklendi yeniden edilmemiştir
  • Object.prototype.hasOwnProperty
  • Yerel Function.prototype.call yeniden tanımlanmadı

Bunlardan herhangi biri tutmazsa, daha güvenli bir şekilde kodlamayı denerseniz, kodunuzu kırmış olabilirsiniz!

call gerekmez başka bir yaklaşım

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

olacağını Şöyle görünüyor da çalışmaya devam eder: O beri

key in entries

anahtar var olup olmadığına bir boolean dönecektir nesnenin içinde?

+0

'hasOwnProperty', bir dize veya sembolün kendi mülkü olup olmadığını kontrol eder. 'Girişlerde anahtar ', kendi mi yoksa mi mi? – Oriol

İlgili konular