如果您已经用JavaScript完成了面向对象的编程,那么您将知道可以按如下方式创建一个类:
Person = function(id, name, age){
this.id = id;
this.name = name;
this.age = age;
alert('A new person has been accepted');
}
到目前为止,我们的类人只有两个属性,我们将提供一些方法。一种干净的方法是使用其“原型”对象。从JavaScript 1.1开始,原型对象是在JavaScript中引入的。这是一个内置对象,可简化向对象的所有实例添加自定义属性和方法的过程。让我们使用其“ prototype”对象向类添加2个方法,如下所示:
Person.prototype = {
wake_up: function() {
alert('I am awake');
},
get_age: function() {
return this.age;
}
}
现在,我们定义了类Person。如果我们想定义另一个称为Manager的类,该类从Person继承一些属性,该怎么办?定义Manager类时,没有必要再次重新定义所有这些属性,只需将其设置为继承自Person类即可。JavaScript没有内置继承,但是我们可以使用一种技术来实现继承,如下所示:
Inheritance_Manager = {};
//我们创建一个继承管理器类(名称是任意的)
现在,让我们为继承类提供一个名为extend的方法,该方法采用baseClass和subClassas作为参数。在extend方法中,我们将创建一个内部类,称为继承函数Inheritance(){}。我们使用此内部类的原因是为了避免baseClass和subClass原型之间的混淆。接下来,使我们的继承类的原型指向baseClass原型,如以下代码所示:Inheritance.prototype = baseClass。原型; 然后,将继承原型复制到subClass原型中,如下所示:subClass.prototype = newInheritance(); 接下来的事情是为我们的子类指定构造函数,如下所示:subClass.prototype.constructor = subClass; 完成子类原型制作后,我们可以指定接下来的两行代码来设置一些基类指针。
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
这是扩展功能的完整代码:
Inheritance_Manager.extend = function(subClass, baseClass) {
function inheritance() { }
inheritance.prototype = baseClass.prototype;
subClass.prototype = new inheritance();
subClass.prototype.constructor = subClass;
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
}
现在我们已经实现了继承,我们可以开始使用它来扩展我们的类了。在这种情况下,我们将Person类扩展为Manager类,如下所示:
我们定义经理类
Manager = function(id, name, age, salary) {
Person.baseConstructor.call(this, id, name, age);
this.salary = salary;
alert('A manager has been registered.');
}
我们使它继承人
Inheritance_Manager.extend(Manager, Person);
如果您注意到了,我们刚刚调用了Inheritance_Manager类的extend方法,并在本例中传递了子类管理器,然后传递了baseClass Person。请注意,这里的顺序非常重要。如果交换它们,则继承将根本无法按预期工作。还要注意,在实际定义我们的子类之前,您需要指定此继承。现在让我们定义子类:
我们可以在下面添加更多方法。我们的Manager类将始终具有Person类中定义的方法和属性,因为它是从其继承的。
Manager.prototype.lead = function(){
alert('I am a good leader');
}
现在对其进行测试,让我们创建两个对象,一个来自Person类,一个来自继承的Manager类:
var p = new Person(1, 'Joe Tester', 26);
var pm = new Manager(1, 'Joe Tester', 26, '20.000');
随时获取完整的代码和更多评论,网址为:http :
//www.cyberminds.co.uk/blog/articles/how-to-implement-javascript-inheritance.aspx