如何在javascript中定义属性子类

时间:2012-07-05 23:28:33

标签: javascript oop class inheritance object

我是Javascript的新手,在找到合适的解决方案时遇到了一些麻烦。在定义具有属性的新子类时,这样做的正确/最佳实践是什么?我从MDN中提取了下面的代码,但它没有讨论如何使用继承传递属性。我需要的是一个超类和子类,它具有在实例化期间定义的属性。超类的属性需要对所有子类可用,并且子类的属性只属于子类。有人可以指出我正确的方向吗?

// define the Person Class  
function Person() {}  

Person.prototype.walk = function(){  
  alert ('I am walking!');  
};  
Person.prototype.sayHello = function(){  
  alert ('hello');  
};  

// define the Student class  
function Student() {  
  // Call the parent constructor  
  Person.call(this);  
}  

// inherit Person  
Student.prototype = new Person();  

// correct the constructor pointer because it points to Person  
Student.prototype.constructor = Student;  

// replace the sayHello method  
Student.prototype.sayHello = function(){  
  alert('hi, I am a student');  
}  

// add sayGoodBye method  
Student.prototype.sayGoodBye = function(){  
   alert('goodBye');
}  

var student1 = new Student();  
student1.sayHello();  
student1.walk();  
student1.sayGoodBye();  

// check inheritance  
alert(student1 instanceof Person); // true   
alert(student1 instanceof Student); // true

1 个答案:

答案 0 :(得分:1)

可以使用this关键字访问实例变量。您可以并且应该在构造函数中初始化实例变量:

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

var bob = new Person("Bob");
alert(bob.name);

jsFiddle

当你继承子类时,超类的实例变量将自动可用于子类。