4 / 2 / 0
Регистрация: 30.07.2018
Сообщений: 83
1

Параметры конструктора

30.10.2018, 23:30. Показов 820. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи всем.
Учусь, набираю, понимаешь, себе код.... и вдруг такая непонятка!!!!!!!!!! Обьясните, кто знает, пожалуйста.

вот так работает как предусмотрено
Javascript
1
2
3
4
5
6
7
8
9
10
11
class MyClass {
 
constructor(name, weather){
 
this.name   = name;
this._weather= weather;
}
 
set weather (value){
this._weather = value
}
А так - нет. То есть показывает, что есть в кострукторе, не меняя содержимого.
Javascript
1
2
3
4
5
6
7
8
9
10
11
class MyClass {
 
constructor(name, weather){
 
this.name   = "NAME";
this._weather= "WITHER";
}
 
set weather (value){
this._weather = value
}
Но ведь конструктор, вроде как, задает только начальные параметры!!! Почему при попытке введения своих параметров, конструктор не сбрасывает свои стартовые данные?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2018, 23:30
Ответы с готовыми решениями:

Как получить данные с конструктора, подскажите
Имеется конструктор пиццы, пример его работы можно глянуть тут...

Унаследовать только свойства внутри конструктора
Как унаследовать только свойства внутри конструктора без свойств которые имеются в его прототипе?...

Как узнать имя конструктора объекта
Всем доброго времени суток. Продолжаю разбираться с ООП в JS. Возникла проблема: хочу написать...

Ошибка конструктора: как создать объект?
Есть такой скрипт: (function(root, factory) { if (typeof define === 'function' && define.amd)...

16
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
30.10.2018, 23:51 2
It is not possible to simultaneously have a setter on a property that holds an actual value.
https://developer.mozilla.org/... ctions/set
Там надо поставить ахтунг!!!
Хороший вопрос,)
0
Эксперт JS
6483 / 3894 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
31.10.2018, 08:31 3
Predator79, Evgen1337, мне сам вопрос этой темы непонятен.
Показаны два абсолютно рабочих варианта класса.
Вопрос то в чём?
Где пример того, где что-то работает неправильно? Пример отсутствует.

Скрипт работает абсолютно ожидаемо:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
        class MyClass {
            constructor(name, weather) {
 
                this.name = "NAME";
                this._weather = "WITHER";
            }
 
            set weather(value) {
                this._weather = value
            }
        }
 
        let o = new MyClass("Первый", "Второй");
        console.log(o._weather);
        o.weather = "Третий";
        console.log(o._weather);
        console.log(o.weather);
    </script>
</body>
</html>
Код
 WITHER
 Третий
 undefined
Приватные поля пока ещё в JavaScript не завезли. Поэтому кишки o._weather пока ещё торчат наружу.
0
4 / 2 / 0
Регистрация: 30.07.2018
Сообщений: 83
31.10.2018, 09:30  [ТС] 4
...секунду, сейчас вывалю.

Добавлено через 12 минут
Вот рабочий
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass {
constructor (name, weather) {
this.name = name;
this.weather = weather;
}
 
printMessage(){
console.log("Zzz " + this.name + ".");
console.log("Tod " + this.weather + ".");
}
}
let myData = new MyClass("Ada",  "sun");
myData.printMessage();
Вот нерабочий
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass {
constructor (name, weather) {
this.name = "name";
this.weather = "weather";
}
 
printMessage(){
console.log("Zzz " + this.name + ".");
console.log("Tod " + this.weather + ".");
}
}
let myData = new MyClass("Ada",  "sun");
myData.printMessage();
0
Эксперт JS
6483 / 3894 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
31.10.2018, 09:35 5
Predator79, и что тут нерабочее? Как запрограммировано, так ожидаемо и выводит:
Код
Zzz name.
Tod weather.
0
4 / 2 / 0
Регистрация: 30.07.2018
Сообщений: 83
31.10.2018, 09:37  [ТС] 6
Да. В этом и вопрос. Выводит параметры конструктора, независимо от того, чтоя туда пытаюсь выставить.
Это и есть вопрос.
Должен выводить Ada и sun
0
Эксперт JS
6483 / 3894 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
31.10.2018, 09:41 7
Predator79, у Вас какой-то самообман.
Не выводит параметры конструктора.
Выводит значения свойств в ипостаси ПОЛЕ.
Значение первого поля: name
Значение второго поля: weather

Цитата Сообщение от Predator79 Посмотреть сообщение
я туда пытаюсь выставить.
Тоже самообман. В конструкторе не пытаетесь вставить.
0
4 / 2 / 0
Регистрация: 30.07.2018
Сообщений: 83
31.10.2018, 09:49  [ТС] 8
amr-now, Можно по существу????
если нет - я разрешаю вам не утруждать себя общением со мной. Не обижусь.
Такой же вариант в С++ работает как предусмотрено.

Добавлено через 3 минуты
конструктор - автоматически (или по алгоритму, предусмотренному программистом) вызываемый метод класса, который служит для "by default" инициализации переменных во избежание работы с неизвестными данными, как понимаю.
Когда я передаю в поля свои данные - они изменяются на мои. В чем проблема????
0
Эксперт JS
6483 / 3894 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
31.10.2018, 09:50 9
Predator79, здесь не C++.
В JavaScript логика свойств и полей похожа на C#.
Согласно логике C# второй класс инициирует поля экземпляра абсолютно ожидаемо и предсказуемо.
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
31.10.2018, 09:51 10
в примере, который не работает
Цитата Сообщение от Predator79 Посмотреть сообщение
constructor (name, weather) {
this.name = "name";
this.weather = "weather";
}
в конструкторе для this.name присваивается строка, а не переменная, которая была передана в конструктор
Цитата Сообщение от Predator79 Посмотреть сообщение
let myData = new MyClass("Ada", *"sun");
1
Эксперт JS
6483 / 3894 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
31.10.2018, 09:51 11
Цитата Сообщение от Predator79 Посмотреть сообщение
Когда я передаю в поля свои данные - они изменяются на мои. В чем проблема????
Проблема в том, что данный конструктор не запрограммирован на передачу параметров конструктора в поля экземпляра.
1
4 / 2 / 0
Регистрация: 30.07.2018
Сообщений: 83
31.10.2018, 09:59  [ТС] 12
то есть получается, что в коде
Javascript
1
2
3
4
constructor (name, weather) {
this.name = name;
this.weather = weather;
}
...нет параметров по умолчанию? Этот код означает совершенно другое?
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
31.10.2018, 10:04 13
) пред, ты что-то съел походу..., в этом коде переданные в конструктор аргументы, присваиваются переменным класса:
Цитата Сообщение от Predator79 Посмотреть сообщение
constructor (name, weather) {
this.name = name;
this.weather = weather;
}
а здесь переменным класса присваиваются строки:
Цитата Сообщение от Predator79 Посмотреть сообщение
class MyClass {
constructor (name, weather) {
this.name = "name";
this.weather = "weather";
}
weather !== "weather"
0
Эксперт JS
6483 / 3894 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
31.10.2018, 10:06 14
Опциональные параметры можно эмулировать например так:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
        class MyClass {
            constructor(name, weather) {
                this.name = name === undefined ? "name" : name;
                this.weather = weather === undefined ? "weather" : weather;
            }
 
            printMessage() {
                console.log("Zzz " + this.name + ".");
                console.log("Tod " + this.weather + ".");
            }
        }
        let myData = new MyClass("Ada", "sun");
        myData.printMessage();
        myData = new MyClass();
        myData.printMessage();
    </script>
</body>
</html>
0
4 / 2 / 0
Регистрация: 30.07.2018
Сообщений: 83
31.10.2018, 10:13  [ТС] 15
Evgen1337,
weather !== "weather" - естественно!!! еще бы. Ладно. Сам разберусь. Спасибо всем.
0
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
31.10.2018, 10:13 16
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  class MyClass {
    // если в конструктор не предаются переменные, установим переменные по умолчанию
    // name = "name", weather = "weather"
    constructor(name = "name", weather = "weather") {
      this.name = name;
      this.weather = weather;
    }
 
    printMessage() {
      console.log("Zzz " + this.name + ".");
      console.log("Tod " + this.weather + ".");
    }
  }
  let myData = new MyClass('Ada', 'sun');
  // Zzz Ada.
  // Tod sun.
  myData.printMessage();
  myData = new MyClass()
  // Zzz name.
  // Tod weather.
  myData.printMessage();
1
Эксперт JS
6483 / 3894 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
31.10.2018, 11:03 17
Evgen1337, спасибо за напоминание об опциональных параметрах.
JavaScript всё больше и больше становится похож на C# ))
Параметры по умолчанию введены в ECMAScript 2015
Chrome 49
Firefox (Gecko) 15.0 (15.0)
Internet Explorer Нет
Opera 36
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2018, 11:03
Помогаю со студенческими работами здесь

Как работает скрипт конструктора интерьера
Здравствуйте. Есть задача сделать онлайн конструктор интерьера для сайта. Сейчас изучаю вопрос....

Так чем всё-таки отличается класс от конструктора?
Доброго. На курсах Codecademy класс фактически приравнивают к конструктору: и далее постоянно...

Параметры конструктора по умолчанию
Привет! Подскажите, что я делаю не так. Создал класс Monstr, как в книжке написано, вот исходники:...

Задать параметры конструктора DateTime в произвольном порядке
Тут написано, что создать значение DateTime можно различными способами. Например, так: DateTime...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru