Повторение значения и замена значения с помощью 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);