在Javascript子对象中继承父级属性

时间:2011-04-16 21:23:18

标签: javascript oop

如果我有这两个功能:

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岁)?

1 个答案:

答案 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创建闭包环境。