下面是JavaScript使用prototype原型实现的封装继承多态示例的完整攻略。
前置知识:
- JavaScript的原型链和原型继承
- JavaScript中的多态和封装
预备知识:
通常,我们使用这种方法,通过创建一个类,然后在类的原型上面定义方法和属性,来实现封装。而通过创建一个子类,然后继承父类的属性和方法,并定义自己的属性和方法,来实现继承。而多态通常可以通过传递不同的参数来实现。
示例1:
我们先考虑一个简单的示例,创建一个Person类,然后在其原型上定义方法speak,然后创建一个Student类继承Person类,并定义自己的方法speak。
// Person类
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.speak = function() {
console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old.');
}
// Student类
function Student(name, age, tag) {
Person.call(this, name, age);
this.tag = tag;
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.speak = function() {
console.log('Hello, my name is ' + this.name + ', I am ' + this.age + ' years old, and I am a ' + this.tag + '.');
}
// 测试代码
let p = new Person('Bob', 21);
p.speak(); // 输出:Hello, my name is Bob, I am 21 years old.
let s = new Student('Alice', 19, 'sophomore');
s.speak(); // 输出:Hello, my name is Alice, I am 19 years old, and I am a sophomore.
在上面的代码示例中,我们先定义了Person类,并在其原型上定义方法speak。然后,我们创建了Student类,并在其原型上重写了方法speak。最后,我们对Person类和Student类分别进行了测试,可以看到,它们都能正常运行,并输出正确的结果。
示例2:
我们再看一个稍微复杂一些的示例,创建一个Animal类,然后创建多个不同的子类,例如Dog类、Cat类等等,并尝试实现多态。
// Animal类
function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log('Hello, I am an animal.');
};
// Dog类
function Dog(name) {
Animal.call(this, name);
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.speak = function() {
console.log('Hello, I am a dog named ' + this.name + '.');
};
// Cat类
function Cat(name) {
Animal.call(this, name);
}
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;
Cat.prototype.speak = function() {
console.log('Hello, I am a cat named ' + this.name + '.');
};
// 测试代码
let a = new Animal('Animal');
let d = new Dog('Dog');
let c = new Cat('Cat');
a.speak(); // 输出:Hello, I am an animal.
d.speak(); // 输出:Hello, I am a dog named Dog.
c.speak(); // 输出:Hello, I am a cat named Cat.
在上面的代码示例中,我们先定义了Animal类,并在其原型上定义方法speak。然后,我们创建了Dog类和Cat类,并在它们的原型上重写了方法speak。最后,我们对Animal类、Dog类和Cat类分别进行了测试,可以看到,它们都能正常运行,并输出正确的结果。
这里需要注意的是,我们在Dog类和Cat类中分别重写了父类中的speak方法,从而实现了多态。这就是JavaScript中封装、继承和多态的经典应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript使用prototype原型实现的封装继承多态示例 - Python技术站