С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
107 / 4 / 1
Регистрация: 04.04.2015
Сообщений: 124

Setter / Getter

18.01.2019, 05:33. Показов 2420. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Подскажите как сделать.
Вот пример кода.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Obj {
    constructor () {
        this._position = {'x':0,'y':0,'z':0};
    }
 
    set position (value) {
        this._position = value;
        console.log('YES');
    }
 
    get position () {
        return this._position;
    }
}
 
 
var o1 = new Obj();
o1.position = {'x':10,'y':0,'z':0}
console.log(o1.position);
 
var o2 = new Obj();
o2.position.x = 10;
console.log(o2.position);
Я создаю 2 объекта.
В первом я заменяю все координаты, и в консоль выводится YES. потом получаю новые координаты.
Во втором заменяю координату только для x, в таком случае YES уже не выводится, и потом получаю новые координаты.

и в 1 и 2 случаю, результат будет один - {'x':10,'y':0,'z':0}, но во 2 случае сеттер не срабатывает... как можно сделать чтобы он тоже срабатывал?
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2019, 05:33
Ответы с готовыми решениями:

Копирование Getter из одного объекта в другой
Уважаемые, у меня есть 2 объекта import * as mutations from './mutations' import * as forms from './../forms/mutations' {...

Getter and setter
Не могу получить значения. Правильно ли я делаю? Здесь геттер и сеттер package mainPackage; public class Calculator { ...

Getter Setter
class point { private: int x; int y; public: int getX() { return x;

7
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
18.01.2019, 08:49
Лучший ответ Сообщение было отмечено SkyWeb как решение

Решение

Добрый день.
Если сильно упростить задачу, то можно реакцию поставить просто на каждый сеттер _position.
И кстати - JSON-нотацию можно и не использовать.
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
28
29
30
31
32
33
        class Obj {
            constructor() {
                this._position = {
                    get x() { return this._x; },
                    set x(value) { this._x = value; console.log('YES'); },
                    get y() { return this._y; },
                    set y(value) { this._y = value; console.log('YES'); },
                    get z() { return this._z; },
                    set z(value) { this._z = value; console.log('YES'); }
                };
                this.position._x = 0;
                this.position._y = 0;
                this.position._z = 0;
            }
 
            set position(value) {
                this._position.x = value.x;
                this._position.y = value.y;
                this._position.z = value.z;
            }
 
            get position() {
                return this._position;
            }
        }
        let o1 = new Obj();
        console.log(o1.position);
        o1.position = { x: 10, y: 0, z: 0 };
        console.log(o1.position);
 
        let o2 = new Obj();
        o2.position.x = 10;
        console.log(o2.position);
(Добавил инициализацию _position нулями.)
1
107 / 4 / 1
Регистрация: 04.04.2015
Сообщений: 124
18.01.2019, 09:26  [ТС]
amr-now Спасибо большое, очень помогли. Только тут в одном случае получается position.x а в другом position._x но это я исправил. Всю ночь не мог разобраться, еще раз огромное спасибо.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
18.01.2019, 09:46
SkyWeb, position._x можно использовать в обход геттера/сеттера.
0
107 / 4 / 1
Регистрация: 04.04.2015
Сообщений: 124
18.01.2019, 09:49  [ТС]
Ну я сделал как мне нужно )),,.. вот, если конечно тут понятно что я делаю ))

JavaScript
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
class Object3D {
    constructor (geometry, material) {
        var obj = Object.assign(geometry,material);
        var _this = this;
        
        this.vertexs = obj.vertexs;
        this.indices = obj.indices;
        this.colors = obj.colors;
                
        this._position = {
            'px':0, 'py':0, 'pz':0,         
            get x() { return this.px; },
            set x(value) { this.px = value; _this.matrix = new Matrix4().translate(_this.matrix,_this._position); },
            get y() { return this.py; },
            set y(value) { this.py = value; _this.matrix = new Matrix4().translate(_this.matrix,_this._position); },
            get z() { return this.pz; },
            set z(value) { this.pz = value; _this.matrix = new Matrix4().translate(_this.matrix,_this._position); }
        };
        this._rotate = {
            'rx':0, 'ry':0, 'rz':0,         
            get x() { return this.rx; },
            set x(value) { this.rx = value; _this.matrix = new Matrix4().rotate(_this.matrix,_this._rotate); },
            get y() { return this.ry; },
            set y(value) { this.ry = value; _this.matrix = new Matrix4().rotate(_this.matrix,_this._rotate); },
            get z() { return this.rz; },
            set z(value) { this.rz = value; _this.matrix = new Matrix4().rotate(_this.matrix,_this._rotate); }
        };
 
        this.matrix = new ASTRA.Matrix4().create();
        this.shader = new ASTRA.Shader();
        
        var colorBuffer = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer);
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(this.colors), gl.STATIC_DRAW);
        gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
        
        var vertexBuffer = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(this.vertexs), gl.STATIC_DRAW);
        gl.vertexAttribPointer(1, 3, gl.FLOAT, false, 0, 0);
 
        var indexBuffer = gl.createBuffer();
        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
        gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(this.indices), gl.STATIC_DRAW);
 
        return this;
    }
    
    set position(value) {
        this._position.px = value[0];
        this._position.py = value[1];
        this._position.pz = value[2];
        this.matrix = new Matrix4().translate(this.matrix,this._position);
    }
 
    get position() {
        return this._position;
    }
    
    set rotate(value) {
        this._rotate.rx = value[0];
        this._rotate.ry = value[1];
        this._rotate.rz = value[2];
        this.matrix = new Matrix4().rotate(this.matrix,this._rotate);
    }
 
    get rotate() {
        return this._rotate;
    }
    
 
}
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
18.01.2019, 14:56
SkyWeb, раз уж взялись за классы, используйте современный синтаксис.
var - грязный хак из древней версии JS. Правильно - let.

Добавлено через 4 часа 53 минуты
Цитата Сообщение от SkyWeb Посмотреть сообщение
this._position = {
'px':0, 'py':0, 'pz':0,
Спасибо за напоминание.
Литерал объекта поразительно похож на объявление класса, но присутствуют малозаметные отличия.
В литерале объекта можно объявлять свойства-значения,
а в объявлении класса принципиально нельзя объявлять свойства-значения вне членов-функций.

JavaScript
1
2
this._position = {
     _x:0, _y:0, _z:0,
Не используйте зря JSON-нотацию.
"Приватные поля" именуются с нижнего подчеркивания.
0
107 / 4 / 1
Регистрация: 04.04.2015
Сообщений: 124
18.01.2019, 15:39  [ТС]
Спасибо.
Переделал на _x:0, _y:0, _z:0, Супер.

"Приватные поля" именуются с нижнего подчеркивания. - Это как негласное правило?, правило хорошего тонна?

По поводу let, на сколько я помню переменные объявленные через let действуют в рамках {}, то есть за ними он не работает.
Переделаю потом.

У меня сейчас задача сделать чтобы этот класс наследовал класс где все будет описано про позицию. И потом класс камеры также. А то сейчас тут вношу правки и тоже самое в другом файле где я камеру описывал.

Давно уже серьезно за WebGl хотел взяться. Много нового для себя открыл. Многие пишут что зачем велосипед изобретать, уже есть готовые библиотеки (threejs например для работы с webgl), но кто-бы что там не говорил, создавать свой велосипед полезно, интересно да и опыт большой. Жаль что в рунете не так много полезной информации по нативному webgl (по webgl 2.0 так вообще ничего нет), все уперлись в эти готовые движки и куча информации которая не уходит дальше hello world. И английский за одно подтягиваю )))
0
9037 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,962
Записей в блоге: 216
21.01.2019, 23:58
Цитата Сообщение от SkyWeb Посмотреть сообщение
Давно уже серьезно за WebGl хотел взяться. Много нового для себя открыл. Многие пишут что зачем велосипед изобретать, уже есть готовые библиотеки (threejs например для работы с webgl), но кто-бы что там не говорил, создавать свой велосипед полезно, интересно да и опыт большой. Жаль что в рунете не так много полезной информации по нативному webgl (по webgl 2.0 так вообще ничего нет), все уперлись в эти готовые движки и куча информации которая не уходит дальше hello world. И английский за одно подтягиваю )))
I am learning English too. WebGL 2.0 is not supported on all browsers. But I study 2.0. We can study WebGL 2.0 with OpenGL ES 3.0 books. You can use books about OpenGL ES 2.0 for learning WebGL 1.0. It is simple to translate examples from OpenGL to WebGL. Yes, it is nessasary to learn English because the most of information is in English. WebGL documentation is in English. I like study Three.js, Babylon.js, Pixi.js and Phaser.js. But I study how to build my own game engine too. I want to study how to write shaders in GLSL + math. I like this book: Build your own 2D Game Engine and Create Great Web Games Using HTML5, JavaScript, and WebGL

These general lessons are good for start:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2019, 23:58
Помогаю со студенческими работами здесь

вопрос о getter\setter
дан код, который трактуется как образец. class Foo { Value field_; public: // функция 1 Value& field() { ...

Auto-generator Of Getter/setter
Доброе время суток, Уважаемые форумчане! Данная утилита облегчает рутинную работу по созданию приватных переменных и последующую...

Почитать о Generic и Getter\Setter
Где можно почитать о Generic и Getter\Setter? Добавлено через 18 минут Почитать об этом*

Добавить корректные getter и setter-методы
Здравствуйте. Подскажите пожалуйста по вопросу: Задание по теме "работа со строками и регулярные выражения". Задание: В Java...

Объясните назначение Setter, Getter, Deleter
Можете объяснить зачем они нужны или же дайте ссылку на нормальный ресурс. После C++ очень тяжело понять ООП python, особенно не понятно с...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru