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
答案 0 :(得分:2)
如果要从原型继承属性值,则不得直接在对象上设置属性。
function Person(gender) {
if (typeof gender !== 'undefined') this.gender = gender;
}
另外,当唯一的目标是设置原型链时,避免新建对象。在某些情况下,使用下面的new
可能会产生不良副作用。
Student.prototype = new Person();
应替换为:
Student.prototype = Object.create(Person.prototype);