Javascript中对象继承的实现小例
实现对象继承的方式有很多种,包括原型链继承、借用构造函数继承、组合继承等。本例介绍如何通过原型链继承的方式实现对象的继承。
原型链继承
原型链继承是一种简单、易懂的继承方式。它的基本原理是:通过将子类的原型设置为父类的实例,子类就可以继承父类的实例属性和方法。
具体来说,我们可以先定义一个父类MyClass,再定义一个子类SubClass,使SubClass的原型指向MyClass的实例。代码如下:
function MyClass(name) {
this.name = name;
}
MyClass.prototype.getName = function() {
return this.name;
}
function SubClass(name, age) {
MyClass.call(this, name);
this.age = age;
}
SubClass.prototype = new MyClass();
SubClass.prototype.constructor = SubClass;
SubClass.prototype.getAge = function() {
return this.age;
}
在上面的代码中,MyClass定义了一个构造函数和一个原型方法getName,其中构造函数接收一个参数name并将其赋值到实例属性this.name上;方法getName返回属性name。
SubClass继承了MyClass的实例属性和方法,同时又定义了自己的实例属性age和方法getAge。子类继承父类的实例属性和方法是通过将SubClass的原型指向MyClass的实例来实现的。而为了避免SubClass的实例也同时继承了MyClass的实例属性和方法(这会导致属性被共享,从而影响实例间的独立性),我们还需要在构造函数中调用父类的构造函数MyClass.call(this, name),以确保子类继承的是父类的实例属性而非实例。
示例1:加强版的类式继承
除了基本的继承之外,我们还可以将原型链继承和其他继承方式结合起来,从而得到一些更为特殊和复杂的继承方式。
例如,我们可以将父类的原型通过Object.create方法克隆一份,再将子类的原型通过extend方法进行扩展。这样做的好处是,父类的原型和子类的原型之间并不共享任何属性,从而避免了属性被共享的问题。
下面是一个加强版的类式继承的示例代码:
function extend(subClass, superClass) {
var F = function(){};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if (superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
};
function Animal(name) {
this.name = name;
}
Animal.prototype.getName = function() {
return this.name;
};
function Person(name, age) {
Person.superclass.constructor.call(this, name);
this.age = age;
}
extend(Person, Animal);
Person.prototype.getAge = function() {
return this.age;
};
var me = new Person('Tom', 25);
console.log(me.getName()); // 'Tom'
console.log(me.getAge()); // 25
console.log(me instanceof Person); // true
console.log(me instanceof Animal); // true
在上面的代码中,extend函数定义了如何对子类的原型进行扩展,并且在子类的原型中添加了一个superclass属性指向父类的原型。Animal和Person分别表示父类和子类。Person继承了Animal,同时添加了自己的实例属性age和方法getAge。我们创建了一个Person的实例me,并对其进行了一些测试。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript中对象继承的实现小例 - Python技术站