在Javascript中,每个对象都有一个原型(prototype)属性,它指向另一个对象,这个对象的属性和方法可以被原型对象继承。
举个例子,我们可以创建一个Person对象:
function Person(name, age) {this.name = name;this.age = age;}然后我们可以在Person的原型上添加一个greeting方法:
Person.prototype.greeting = function() {console.log(Hello, my name is ${this.name} and I am ${this.age} years old);}现在我们可以创建一个实例,并调用greeting方法:
const person1 = new Person('Alice', 25);person1.greeting(); //输出:Hello, my name is Alice and I am 25 years old我们还可以创建一个Student对象,让它继承Person的属性和方法:
function Student(name, age, grade) {Person.call(this, name, age);this.grade = grade;}Student.prototype = Object.create(Person.prototype);Student.prototype.constructor = Student;Student.prototype.getGrade = function() {console.log(My grade is ${this.grade});}现在我们可以创建一个Student实例,并调用它们继承的属性和方法:
const student1 = new Student('Bob', 18, 'AA');student1.greeting(); //输出:Hello, my name is Bob and I am 18 years oldstudent1.getGrade(); //输出:My grade is AA但需要注意的是,使用原型继承时,所有实例都会共享原型对象上的方法。如果我们在Student原型上修改greeting方法,那么Person的实例也会受影响:
Student.prototype.greeting = function() {console.log(Hi, my name is ${this.name} and I am ${this.age} years old);}person1.greeting(); //输出:Hi, my name is Alice and I am 25 years oldstudent1.greeting(); //输出:Hi, my name is Bob and I am 18 years old因此,当我们修改原型对象的属性或方法时,需要谨慎考虑,确保不会影响到其他实例。
除了使用原型继承,我们还可以使用ES6中的class语法来创建对象,并实现继承:
class Animal {constructor(name) {this.name = name;}speak() {console.log(${this.name} makes a noise);}}class Dog extends Animal {constructor(name) {super(name);}speak() {console.log(${this.name} barks);}}const dog1 = new Dog('Buddy');dog1.speak(); //输出:Buddy barks上面的代码中,我们创建了一个Animal类,并在它的原型上添加了speak方法。然后我们又创建了一个Dog类,并使用extends关键字来让它继承Animal类的属性和方法。在Dog类中,我们重写了speak方法。
现在我们可以创建一个Dog实例,并调用它的speak方法。由于我们重写了speak方法,所以它会输出不同的内容。
总之,在Javascript中,原型是一个非常重要的概念,它让我们能够轻松地实现继承,同时避免不必要的代码重复。我们需要深入学习原型的概念和用法,才能更好地理解Javascript的面向对象编程。
上一篇:javascript中在li标签的值
下一篇:css按钮点击波浪效果









