Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

161
Visualizações
Agregar atributo a la instancia de "Número"

Quiero ver si un número es un múltiplo de π . Entonces, idealmente, se comportaría exactamente como un número ordinario, pero con una funcionalidad adicional:

 >>> pi 3.14... >>> pi.isMultipleOfPi true >>> b = pi * 5 >>> b.isMultipleOfPi true

con ilusiones

 >>> c = pi + 1 >>> c.isMultipleOfPi false >>> d = pi + 2 * pi >>> d.isMultipleOfPi true

¿Hay alguna manera de lograr algo así en Javascript? Creo que esto sería bastante sencillo en Python, pero parece que no hay forma de crear sobrecargas para sumas/multiplicaciones, etc. en JS. Si lo hubiera, simplemente podría extender la clase Number .

Establecer algo en Number.prototype = function tampoco parece funcionar, ya que lo establece para toda la clase y no en una instancia.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

No puede agregar propiedades a valores numéricos específicos ; no son objetos y por lo tanto no pueden tener ninguna propiedad. Puede agregar propiedades al prototipo de Número, de la siguiente manera:

 Object.defineProperty(Number.prototype, "isMultipleOfPi", { get: function() { return this.valueOf() % Math.PI === 0; } }); const pix2 = Math.PI * 2; console.log(pix2.isMultipleOfPi); console.log((7).isMultipleOfPi);

Eso agrega una propiedad de prototipo de Número definida con una función "obtener" para que el código que publicó funcione como espera. El método estará disponible para todos los números en su programa, lo que no parece malo si desea esa función.

Tenga en cuenta también que muchas personas desaprueban la extensión de objetos prototipo integrados. En mi ejemplo, amplié el prototipo de una manera que mejora algunos de los problemas con los prototipos extendidos.

about 4 years ago · Juan Pablo Isaza Relatório

0

Al principio pensé que quería hacer esto para todos los números, que se responde aquí .

Pero si solo desea hacer esto para un número específico, puede hacerlo, pero probablemente no quiera hacerlo. El 99.9999999999998% de todos los números con los que trabaja en JavaScript son primitivos, no objetos, por lo que no tienen ninguna propiedad (las que parecen tener solo provienen de Number.prototype [o, a su vez, de Object.primitive ], que utilizará el motor de JavaScript si intenta acceder a una propiedad en un número primitivo).

En su lugar, podría crear un objeto numérico y ponerle la propiedad:

 const c = new Number(Math.PI); c.isMultipleOfPI = true; console.log(c); console.log(String(c)); console.log(c.isMultipleOfPI);

Sin embargo, el problema con eso se demuestra en console.log(c); línea de arriba. Con las herramientas de desarrollo de Chrome (y quizás otras), verás esto:

 { isMultipleOfPI: true, }

en lugar de 3.141592653589793 como podría estar esperando.

La razón es que c es un objeto , no una primitiva, y algunas cosas que lo usan (como console.log ) pueden tratarlo principalmente como un objeto en lugar de como un número.

Sin embargo, las matemáticas y la concatenación de cadenas funcionan:

 const c = new Number(Math.PI); c.isMultipleOfPI = true; console.log(c * 2); console.log(c - 2); console.log(c + 2); console.log(c / 2); console.log("The number is " + c);

Solo tenga en cuenta que las instancias de Number (objetos) son objetos, y que muy, muy poco código está escrito explícitamente para trabajar con ellos correctamente. La mayoría del código que usa números espera números primitivos .

Alternativamente, puede crear una propiedad de acceso en Number.prototype ( Pointy le muestra cómo ) que determina si el número al que se llama es un múltiplo de PI y devuelve la bandera correcta. Eso le daría la sintaxis que mostró, pero en todos los números. Pero es una llamada de función, por lo que acceder a la propiedad funciona cada vez. Simplemente tener una isMultipleOfPI(num) podría ser más claro.

En un comentario que has escrito:

Porque Number.prototype = function(){ return self % Math.PI ~ 0 } no es lo que estoy buscando. Me gustaría distinguir entre 3.14 y 3.14 con la propiedad isMultipleOfPi.

La única forma de hacerlo es usar objetos Number en lugar de números primitivos, como se describe anteriormente.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda