如果我有这两个功能:
function Person(age)
{
this.setAge = function(newAge)
{
age = newAge;
}
this.getAge = function()
{
alert(age);
}
}
function Bob(age)
{
Person.call(this, age);
this.foo = function() {} //etc
}
Bob.prototype = new Person();
bob = new Bob(43);
bob.getAge();
是否会提醒正确的年龄(43岁)?
答案 0 :(得分:1)
答案是肯定的,但调用setAge不会改变foo函数版本的年龄,因为它们是不同的捕获变量。考虑转移到看起来更像的样式
function Person(age) { this.age = age; }
Person.prototype.getAge = function() { return this.age; };
Person.prototype.setAge = function(value) { this.age = value; }
function Bob(age) { Person.call(this, age); }
Bob.prototype = new Person();
Bob.prototype.foo = function() { /* ... */ }
请注意,foo()
和getAge()
现在看到的this.age
值相同。此外,多空间效率更高,因为Person和Bob的实例每个实例只使用一个插槽而不是3到4,并且不需要为getAge,setAge和foo创建闭包环境。