Aprende a evitar que aparezca el error 'do-not-access-objectprototype-method' cuanto trates de compilar tu aplicación de JavaScript.

Cómo corregir el error de ESLint: Do not access Object.prototype method 'hasOwnProperty' from target object no-prototype-builtins

Iniciar un nuevo proyecto con Vue.js generará automáticamente una plantilla que está configurada para trabajar con ESLint. ESLint es una herramienta de linter conectable y configurable que te ayuda a identificar e informar malos patrones en JavaScript, para que puedas mantener la calidad de tu código con facilidad. Si comienzas a programar sin control, probablemente puedas introducir algunas prácticas que no son buenas para ESLint. Por ejemplo, una de las cosas más simples como comprobar que algún objeto tiene una propiedad específica:

let events = {"some-index": false};
let key = "some-index";

if(events.hasOwnProperty(key)){
    // Hacer algo ...
    console.log("El objeto tiene la propiedad");
}

Esto desencadenaría la excepción mencionada cuando intentes compilar tu aplicación, debido a la regla no-prototype-builtins. En ECMAScript 5.1, Object.create se agregó el método, que permite la creación de objetos con un [[Prototipo]] específico. Object.create (null) es un patrón común que se utiliza para crear objetos que se utilizarán como mapa. Esto puede dar lugar a errores cuando se supone que los objetos tendrán propiedades de Object.prototype. La regla no-prototype-builtins evita llamar a métodos Object.prototype directamente desde un objeto. Para obtener más información sobre las incorporaciones sin prototipos, visita la documentación oficial de ESLint aquí.

En este artículo, compartiré contigo diferentes formas de evitar que aparezca este error al intentar construir tu aplicación.

Soluciones

Hay varias formas de evitar este error, la primera es simplemente acceder a hasOwnPropertyMethod desde el prototipo de Object y ejecutar la función usando call:

let events = {"some-index": false};
let key = "some-index";

if(Object.prototype.hasOwnProperty.call(events, key)) {
    // Esto se ejecutaria sin desencadenar la excepcion
    console.log("El objeto tiene la propiedad");
}

Una forma equivalente de verificar si el objeto tiene la propiedad, siempre que no hayas hecho nada para que las propiedades no sean enumerables:

let events = {"some-index": false};
let key = "some-index";

if({}.propertyIsEnumerable.call(events, key)) {
    // Esto se ejecutaria sin desencadenar la excepcion
    console.log("El objeto tiene la propiedad");
}

O a través del método getOwnPropertyDescriptor:

let events = {"some-index": false};
let key = "some-index";

if(!!Object.getOwnPropertyDescriptor(events, key)) {
    // Esto se ejecutaria sin desencadenar la excepcion
    console.log("El objeto tiene la propiedad");
}

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores