【发布时间】:2016-01-24 06:45:09
【问题描述】:
我正在研究一个以姓名和年龄作为参数的 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
我设置了一个变量,该变量在所有实例(inst)之间共享,每次创建另一个实例时都会递增并分配一个唯一的 id。我无法弄清楚如何使用我在底部添加的 aveAge 原型来获取现有的所有 Person 实例的每个“年龄”值。当我尝试调用它以测试变量“inst”是否包含正确数量的实例时,我也会收到“TypeError:Person.aveAge 不是函数”。有人知道我哪里出错了吗?
【问题讨论】:
-
首先
Person.aveAge()不在原型上,而是在构造函数本身上,所以Person.prototype.aveAge =应该是Person.aveAge =。其次,您不需要使用 get/set,并且会影响您手动设置的道具。 -
aveAge()是您的 Person 对象的方法,例如jim.aveAge()。 -
可能更像这样 -> jsfiddle.net/apgk6mhL
-
感谢大家的建议 - 似乎我有点困惑。非常感谢小提琴和代码 sn-ps 中的视觉效果。
标签: javascript oop constructor closures iife