Повторение значения и замена значения с помощью JS

Новичок в JS здесь. У меня проблемы с заменой и повторением значения из функции. Вот код:

function Phone(ring) {
  this.ring = ring;
}
function updateRing(newRing) {  
  this.newRing = ring;
}

var samsung = new Phone('Chim');
samsung.ring(2); // Needs to compute to "Chim, Chim"

var htc = new Phone('Dada');
htc.ring(3); // Needs to compute to "Dada, Dada, Dada"
htc.updateRing('Riri');
htc.ring(1); // Needs to compute to "Riri"

Для значения повторения для первой функции я попытался использовать this.repeat, но он не работал внутри функции Phone.

Для функции updateRing я не смог получить код для замены this.ring.

Я сократил весь бесполезный код, который я написал. Заранее благодарю за любую помощь.

3 ответа

Решение

Вы можете повторить строки с string.repeat()

let a = "ring"

console.log(a.repeat(2))

Но чтобы запятая работала как следует, вы можете создать одноразовый массив и join() с запятой.

let ringString = Array(3).fill("ring").join(", ")
console.log(ringString)

Для других вы, вероятно, захотите использовать классы, которые довольно просты, но не запускаются в IE без ployfill. Или прототипы, которые поначалу могут немного запутать. Вот пример использования прототипов для определения методов на вашем Phone объект:

function Phone(ring) {
  // changed to ring_tone too prevent clash with this.ring method
  this.ring_tone = ring;
}
// you need to define these on the prototype to you can use `this`
Phone.prototype.updateRing = function(newRing) {
  // don't need to define a this.newRing, just update the ring
  this.ring_tone = newRing;
}

Phone.prototype.ring = function(n) {
  return new Array(n).fill(this.ring_tone).join(', ')

}

var samsung = new Phone('Chim');
console.log(samsung.ring(2)); // Needs to compute to "Chim, Chim"

var htc = new Phone('Dada');
console.log(htc.ring(3)); // Needs to compute to "Dada, Dada, Dada"

htc.updateRing('Riri');
console.log(htc.ring(1)); // Needs to compute to "Riri"

1) Вы вызываете samsung.ring как функцию, даже если это просто переменная экземпляра Phone.

2) Причина, по которой this.repeat не сработал, заключается в том, что repeat не является методом "this", который относится к Phone.

Попробуйте это вместо этого:

var samsung = new Phone('Chim');
samsung.ring.repeat(2);

var htc = new Phone('Dada');
htc.ring.repeat(3);

Может быть, попробуйте это:

class Phone {
  constructor(sound) {
    this.sound = sound;
  }
  ring(number) {
    var i;
    for (i = 0; i < number; i++) { 
      console.log(this.sound + ", ");
    }
  }
  updateRing(newSound) {
    this.sound = newSound;
  }
}

var samsung = new Phone('Chim');
samsung.ring(2);
samsung.updateRing('Riri');
samsung.ring(1);

Codepen - https://codepen.io/anon/pen/MGRJOB?editors=0010

Другие вопросы по тегам