Создание одного частного свойство для объекта потомка
Как работает код:
Класс-родитель и его поля (Numbers()): Три вещественных числа x,y,z Функция-метод 1 обработки данных: Вычислить среднее геометрическое чисел Функция-метод-2 обработки данных: Определить, сколько цифр содержит сумма заданных трех чисел Класс-потомок и его поля(New_three()): Два набора чисел: еще три вещественных числа a,b,c Функция-метод обработки данных класса-потомка: определить скалярное произведение двух наборов чисел Для New_three() нужно создать одно частное свойство. Знаю, что нужно использовать get или set, но меняя, код перестает работать. Я правильно понимаю, что функцию Product нужно менять? Ведь частное свойство - это свойство, к которому нельзя обратиться по имени? function Numbers(params){ for (var i =1; i<params.length; i++) { if (i==4) break; if (i==3) continue; if (typeof params[i] != "number") throw new Error("Error"); } for (var i = 0; i<params.length; i++) { if (i==0) this.x = params[0]; if (i==1) this.y = params[1]; if (i==2) this.z = params[2]; if (i==3) this.middle = params[3]; if (i==4) this.summa = params[4]; } this.GeometricMean = function(){this.middle = (this.x+this.y+this.z)/3;} } Numbers.prototype = new Numbers(this.x = 0, this.y = 0, this.z = 0, this.middle = 0, this.summa = 0); Numbers.prototype.constructor = Numbers; Numbers.prototype.DigitSumm = function(){var kol = this.x+this.y+this.z; this.summa = kol.toString().length;} function New_three(params){ Numbers.apply(this, arguments); for (var i =1; i<params.length; i++) { if (i==3) break; if (i==2) continue; if (typeof params[i] != "number") throw new Error("Error"); } for (var i = 0; i<params.length; i++) { if (i==0) this.a = params[0]; if (i==1) this.b = params[1]; if (i==2) this.c = params[2]; if (i==3) this.product = params[3]; } this.Product = function(){this.product = this.a * this.b + this.b * this.c;} } // наследование New_three.prototype = new Numbers([12.1, 10.5, 20.0, 0, 0]); New_three.prototype.constructor = New_three; var numbers = new Numbers([12.1, 10.5, 20.0, 0, 0]); var chisla = new New_three([7.7, 8.5, 9.2, 0]); reload(); |
А если я просто переименую this.Product в this.getProduct, это будет считаться частным свойством?
|
Цитата:
this.x = params[0]; this.y = params[1]; this.z = params[2]; this.middle = params[3]; this.summa = params[4];если аргумент конструктора вместо (params) записать так ([x, y, z, middle, summa]), то можно... this.x = x; this.y = y; this.z = z; this.middle = middle; this.summa = summa;или так... Object.assign(this, { x, y, z, middle, summa }); Цитата:
Цитата:
Numbers.prototype = {};Ваши this.x = 0 и т. д. создают глобальные переменные, поскольку this в том контексте указывает на глобальный объект. И зачем вам передавать в конструктор параметры, которые вы всё равно перезапишите? function Numbers(x, y, z) { if(![x,y,z].every(Number.isFinite)) throw new Error("x, y, or z is not a number"); Object.assign(this, { x, y, z }); } Numbers.prototype = { constructor: Numbers, get mean() { return this.sum / 3; }, get sum() { return this.x + this.y + this.z; } }; function Numbers2(a, b, c) { if(![a,b,c].every(Number.isFinite)) throw new Error("a, b or c is not a number"); this.__proto__.__proto__.constructor.apply(this, arguments); // super(...arguments); Object.assign(this, { a, b, c }); } Numbers2.prototype = { __proto__: Numbers.prototype, constructor: Numbers2, get product() { return this.a * this.b + this.b * this.c; } }; var numbers = new Numbers(12.1, 10.5, 20.0); var chisla = new Numbers2(7.7, 8.5, 9.2); Цитата:
|
Часовой пояс GMT +3, время: 18:30. |