js原型链

66 阅读2分钟

JS原型链

JS(JavaScript)是一门基于原型的语言,在JS中每个对象都有一个原型(prototype)。原型对象是定义属性和方法的对象,它充当了对象的模板,其他对象可以通过它来继承属性和方法。

JS中所有的对象都有一个隐藏的内部属性[[Prototype]](也可以通过ES6的Object.getPrototypeOf()方法来访问),它指向了该对象的原型对象。当我们访问对象上的属性时,如果对象本身没有该属性,JS就会沿着原型链向上查找,直到找到该属性或者到达原型链的顶端为止。

例如:

// 定义一个Person构造函数
function Person(name) {
  this.name = name;
}

// 定义Person的原型对象上的一个方法
Person.prototype.sayHello = function () {
  console.log(`Hello, my name is ${this.name}.`);
}

// 创建一个Person对象
const john = new Person("John");

// 调用对象上的方法
john.sayHello();  // 输出:Hello, my name is John.

// 访问对象上的属性
console.log(john.name);  // 输出:John

// 通过原型链访问对象上的方法
console.log(john.toString());  // 输出:[object Object]

在上面的例子中,我们定义了一个Person构造函数,并在它的原型对象上添加了一个sayHello方法。我们创建了一个Person对象john,并调用了对象上的方法sayHello。此外,我们还访问了对象上的属性name,并通过原型链访问了对象的toString方法。

通过原型链,JS实现了继承的概念。当我们创建一个对象时,它会继承它的原型对象上的所有属性和方法。如果我们要在对象上添加属性或方法,它们将成为该对象的自有属性。如果要在原型对象上添加属性或方法,它们将成为所有继承该原型对象的对象共享的属性和方法。

在实际开发中,我们可以利用原型链来实现继承和扩展。例如,我们可以定义一个Animal构造函数和它的原型对象上的方法,然后通过继承它们来创建DogCat对象,并在它们上面添加自有属性和方法。这样,我们就可以避免代码的重复,提高代码的复用性和可维护性。

总之,JS原型链是JS中非常重要的一个概念。通过它,我们可以实现对象的继承和扩展,提高代码的复用性和可维护性。