Я работаю над функцией конструктора Person, которая принимает имя и возраст в качестве своих параметров и пытается реализовать метод, который извлекает все текущие значения и выходы текущего экземпляра Person среднее. Вот мой код ...Извлечение значения, хранящегося во всех экземплярах объекта
var Person = (function() {
//private state
var inst = 1;
function Person(name, age) {
this.name = name;
this.age = age;
Object.defineProperty(this, "age", {
get: function() {
return age;
},
set: function(num) {
age = num;
}
});
Object.defineProperty(this, "_id", {
value: inst++
});
}
//Attempt to return number of instances divided by all current Person weights
Person.prototype.aveAge = function() {
return inst;
};
return Person;
}());
var jim = new Person("jim", 32);
var richard = new Person("richard", 27);
richard.age = 28;
var alfie = new Person("alfie", 42);
Person.aveAge() //Returns TypeError: Person.aveAge is not a function
Я создал переменную, которая используется во всех случаях (внутр), что увеличивает каждый раз, когда создается другой экземпляр и присваивает уникальный идентификатор. Я не могу понять, как я могу получить каждое «возрастное» значение всех существующих экземпляров Person, используя прототип aveAge, который я добавил внизу. Я также получаю «TypeError: Person.aveAge не функция», когда я пытаюсь вызвать его, даже чтобы проверить, что переменная «inst» содержит правильное количество экземпляров. Кто-нибудь знает, где я ошибаюсь?
Прежде всего, 'Person.aveAge()' не на прототипе, но на самом конструкторе, так что 'Person.prototype.aveAge =' должен быть 'Person.aveAge = '. Во-вторых, ваше использование get/set не является необходимым и затеняет реквизит, который вы устанавливаете вручную. –
'aveAge()' - это метод ваших объектов Person, например 'jim.aveAge()'. – jfriend00
Наверное, больше нравится -> ** http: //jsfiddle.net/apgk6mhL/** – adeneo