JavaScript 原型链是实现对象间继承和共享属性的主要机制。在 JavaScript 中,每个对象都有一个指向其原型的内部链接。当试图访问一个对象的属性时,如果该对象内部不存在这个属性,那么 JavaScript 引擎会沿着原型链向上查找,直到找到属性或者到达原型链的顶端(null
)。
以下是原型链的运用方法:
创建构造函数:
首先,我们需要创建一个构造函数,它将作为我们创建的对象的基础。构造函数通常包含一个 prototype
属性,该属性指向一个原型对象。
function Person(name, age) {
this.name = name;
this.age = age;
}
在原型对象上定义属性和方法:
接下来,我们在构造函数的 prototype
对象上定义属性和方法,这样所有通过 Person
构造函数创建的对象都可以访问这些共享资源。
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
创建对象实例:
现在,我们可以使用 Person
构造函数创建对象实例,并通过原型链访问在 prototype
对象上定义的属性和方法。
var person1 = new Person('Alice', 30);
var person2 = new Person('Bob', 25);
person1.sayHello(); // 输出 "Hello, my name is Alice"
person2.sayHello(); // 输出 "Hello, my name is Bob"
原型链继承:
要实现原型链继承,我们可以在一个构造函数的原型对象上设置另一个构造函数的引用。这样,子类可以访问父类的原型对象上的属性和方法。
function Student(name, age, course) {
Person.call(this, name, age);
this.course = course;
}
// 设置 Student 的原型对象为 Person 的实例,实现继承
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
// 在 Student 的原型对象上添加特定于学生的属性和方法
Student.prototype.sayCourse = function() {
console.log('I am studying ' + this.course);
};
var student1 = new Student('Charlie', 22, 'JavaScript');
student1.sayHello(); // 输出 "Hello, my name is Charlie"
student1.sayCourse(); // 输出 "I am studying JavaScript"
通过以上方法,我们可以充分利用 JavaScript 原型链实现对象间的继承和共享属性。