返回

JavaScript万物皆空之原型理解

前端

万物皆空

这句话出自《心经》,是佛教中非常重要的一个偈语。它告诉我们,世间的一切都是空的,都是无常的,都是不真实的。

这句话也可以用来形容JavaScript中的原型。原型也是一种空的概念,它无处不在,但又无处可寻。它是一种思维方式,一种看待对象的方式。

原型的定义

在JavaScript中,原型是一个对象,它包含了另一个对象的所有属性和方法。换句话说,原型就是对象的模板。

每个对象都有一个原型,这个原型可以是另一个对象,也可以是null。如果一个对象的原型是另一个对象,那么这个对象就会继承另一个对象的所有属性和方法。

原型的作用

原型的作用有很多,其中最重要的作用就是实现继承。通过原型,我们可以很方便地创建一个新的对象,这个新的对象会继承另一个对象的所有属性和方法。

此外,原型还可以用来共享属性和方法。如果多个对象都有相同的属性和方法,那么我们可以把这些属性和方法放到它们的原型中,这样这些对象就可以共享这些属性和方法了。

原型的创建

原型有两种创建方式:

  1. 通过Object.create()方法创建。
  2. 通过new运算符创建。

Object.create()方法创建一个新的对象,这个新对象的原型就是Object.create()方法的第一个参数。

new运算符创建一个新的对象,这个新对象的原型就是new运算符后面的函数的prototype属性。

原型的继承

在JavaScript中,继承是通过原型来实现的。当一个对象继承另一个对象时,它会继承另一个对象的所有属性和方法。

我们可以使用Object.create()方法或new运算符来实现继承。

Object.create()方法可以创建一个新的对象,这个新对象的原型就是Object.create()方法的第一个参数。

new运算符可以创建一个新的对象,这个新对象的原型就是new运算符后面的函数的prototype属性。

ES6中的原型

在ES6中,引入了class和extends,这使得JavaScript中的继承更加方便。

class关键字创建一个新的类,extends关键字表示继承。

class Parent {
  constructor(name) {
    this.name = name;
  }

  getName() {
    return this.name;
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }

  getAge() {
    return this.age;
  }
}

const child = new Child("John", 10);

console.log(child.getName()); // John
console.log(child.getAge()); // 10

在这个例子中,Child类继承了Parent类。Child类可以访问Parent类的所有属性和方法。

结语

原型是JavaScript中一个非常重要的概念。通过原型,我们可以实现继承和共享属性和方法。ES6中引入了class和extends关键字,使得JavaScript中的继承更加方便。