No estoy seguro de si este es un código incorrecto o sería "mejor" poner la función isPrime en un método y luego usar ese método dentro del método printSomething. Si es así, ¿cómo sería posible? ¿Cómo puedo usar un método dentro? ¿otro método?
class PrimeNumbers{ constructor(isPrime, number){ this.isPrime = isPrime; this.succes = "succes"; this.failure = "failure"; this.number = number; } printSomething(isPrime){ if (!this.isPrime(this.number)) { console.log(this.succes); } else { console.log(this.failure); } } } function isPrime(value) { if (value == 1) return false; for (let i = 2; i <= Math.sqrt(value); i++) { if (value % i == 0) { return false; } } return true; } let primeTest = new PrimeNumbers(isPrime, 10) primeTest.printSomething()A ver si viene alguien que pueda explicar esto mejor que yo. En caso de que no lo hagan... puede agregar isPrime como método en PrimeNumbers y luego usarlo con this.isPrime() . Aquí, this se refiere al objeto actual con el que está tratando.
Cuando let primeTest = new PrimeNumbers(10); primeTest se convierte en una instancia de PrimeNumbers, cuando haces primeTest.printSomething() estás accediendo a la propiedad printSomething en primeTest y llamándola. Una vez que el código se está ejecutando dentro de printSomething, a menudo necesitará una forma de referirse al objeto que está almacenado en primeTest, eso es lo que hace this palabra clave; le permite referirse a la instancia particular del objeto que se está tratando cuando se ejecuta el código.
Esta página es probablemente mucho mejor para explicar lo que acabo de tratar de explicar.
En términos de si es mejor agregar para agregar isPrime a la clase. No estoy muy seguro, puede que dependa de otras cosas. Si no lo agrega a la clase, es bastante improbable que necesite pasar la función como argumento al constructor (aunque probablemente haya razones para hacerlo, probablemente no tenga sentido si siempre está pasando la misma función) simplemente puede llamar a la función dentro de los métodos de clase.
isPrime como método:
class PrimeNumbers{ constructor(number){ this.succes = "succes"; this.failure = "failure"; this.number = number; } printSomething(){ if (!this.isPrime(this.number)) { console.log(this.succes); } else { console.log(this.failure); } } isPrime(value) { if (value == 1) return false; for (let i = 2; i <= Math.sqrt(value); i++) { if (value % i == 0) { return false; } } return true; } } let primeTest = new PrimeNumbers(10); primeTest.printSomething();isPrime como función llamada desde la clase:
function isPrime(value) { if (value == 1) return false; for (let i = 2; i <= Math.sqrt(value); i++) { if (value % i == 0) { return false; } } return true; } class PrimeNumbers{ constructor(number){ this.succes = "succes"; this.failure = "failure"; this.number = number; } printSomething(){ if (!isPrime(this.number)) { console.log(this.succes); } else { console.log(this.failure); } } } let primeTest = new PrimeNumbers(10); primeTest.printSomething();