#javascript
#javascript
Вопрос:
Могу ли я иметь переменную в функции конструктора, не имея ее в аргументе функции?
как показано ниже:
function Person(name,height,weight){
this.name=name;
this.height=height;
this.weight=weight;
this.bmi=null;
this.calculateBMI = function()
{
if (this.bmi===null){
this.bmi = this.weight / (Math.pow(this.height,2));
}
return this.bmi;
}
}
var person1 = new Person("alayna",23, 56)
могу ли я иметь функцию Person(имя, рост, вес), а внутри нее у меня есть this.bmi? как функция узнает, что такое bmi здесь?
Комментарии:
1. Да, у вас могут быть и другие переменные, охватываемые функцией, т. Е. Определенные с
var
помощью ,let
,const
и т. Д. Нет ничего, что ограничивало бы использование / определение переменных в функциях конструктора2. В конструкторах нет ничего особенного, за исключением того, что они вызываются автоматически при использовании
new
. Конструктор может делать с объектом все, что может любой другой метод.3. Вы спрашиваете, можете ли вы сделать
var bmi = null; this.calculateBMI = function() { if (bmi===null)...
Ответ №1:
Вы можете выбрать, использовать значение параметра или нет
function Person (name, height, weight) {
this.name = name;
this.height = height;
this.weight = weight;
this.bmi = this.weight / (Math.pow(this.height, 2));
}
Person.prototype.calculateBMI = function() {
this.bmi = this.weight / (Math.pow(this.height, 2));
return this.bmi;
}
var person1 = new Person("alayna",23, 56);
Хотя, возможно, вы хотите посмотреть на геттеры и сеттеры:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set
Который позволит вам обновлять bmi
каждый раз height
или weight
обновляется. Например, следующее обновит bmi
, если либо height
или weight
когда-либо изменится
class Person {
constructor(name, height, weight) {
this.name = name;
this._height = height;
this._weight = weight;
this.bmi = this._weight / (Math.pow(this._height, 2));
}
get weight() {
return this._weight;
}
set weight(value) {
this._weight = value;
this.bmi = value / (Math.pow(this._height, 2));
}
get height() {
return this._height;
}
set height(value) {
this._height = value;
this.bmi = this._weight / (Math.pow(value, 2));
}
}
const person1 = new Person('alayna', 23, 56);
console.log(person1.bmi);
person1.height = 25;
console.log(person1.bmi);
Комментарии:
1. Мой вопрос заключается в обратном. Если у меня нет ‘bmi’ в аргументе функции, например Person (имя, рост, вес), могу ли я иметь this.bmi внутри функции?
2. Да, я обновил ответ, чтобы удалить
bmi
из параметров