Javascript原型属性

时间:2014-05-18 22:33:52

标签: javascript prototype

Introduction to Object-Oriented JavaScript让我感到困惑。

他们定义一个Person类,如下所示:

  

应在类的prototype属性中设置属性   (函数)以便继承正常工作。

function Person(gender) {
  this.gender = gender;
  alert('Person instantiated');
}

Person.prototype.gender = '';

稍后当他们给出一个继承的例子时,他们删除了gender属性(为了清楚我假设),所以我不确定第Person.prototype.gender = '';行是做什么的。

我试过了:

function Person(gender) {
  this.gender = gender;
}

Person.prototype.gender = 'default';

function Student(gender) {
  Person.call(this, gender);
};

Student.prototype = new Person();
Student.prototype.constructor = Student;


var a = new Student('male');
var b = new Student();

console.log(a.gender); //prints 'male'
console.log(b.gender); //I expect 'default', but get undefined

1 个答案:

答案 0 :(得分:2)

如果要从原型继承属性值,则不得直接在对象上设置属性。

function Person(gender) {
  if (typeof gender !== 'undefined') this.gender = gender;
}

另外,当唯一的目标是设置原型链时,避免新建对象。在某些情况下,使用下面的new可能会产生不良副作用。

Student.prototype = new Person();

应替换为:

Student.prototype = Object.create(Person.prototype);