141 votes

Pourquoi utiliser Object.prototype.hasOwnProperty.call(myObj, prop) au lieu de myObj.hasOwnProperty(prop) ?

Si je comprends bien, chaque objet en JavaScript hérite du prototype Object, ce qui signifie que chaque objet en JavaScript a accès à la fonction hasOwnProperty via sa chaîne de prototypes.

En lisant RequireJS Je suis tombé sur cette fonction :

function hasProp(obj, prop) {
    return hasOwn.call(obj, prop);
}

hasOwn est une référence à Object.prototype.hasOwnProperty . Y a-t-il une différence pratique à écrire cette fonction sous forme de

function hasProp(obj, prop) {
    return obj.hasOwnProperty(prop);
}

Et puisque nous y sommes, pourquoi définir cette fonction ? S'agit-il seulement d'une question de raccourcis et de mise en cache locale de l'accès aux propriétés pour un (léger) gain de performance, ou est-ce que je rate des cas où hasOwnProperty pourrait être utilisé sur des objets qui n'ont pas cette méthode ?

0voto

C'est beaucoup plus simple avec :

let foo = Object.create(null);
if (foo.bar != null) {
    console.log('object foo contains bar property in any value and 
    type, except type undefined and null');
    // bar property can exist in object foo or any object of the prototype chain
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X