返回

深入探究JavaScript原型链——原型、__proto__和构造函数(上)

前端

前言

函数对象是由function创造出来的函数,比如:

function add(a, b) {
  return a + b;
}

系统内置的函数对象只有函数对象才有prototype属性,重要的事情说三遍!普通对象除开函数对象之外的对象都是普通对象。

原型对象prototype属性

原型

原型是JavaScript中一个非常重要的概念,它决定了对象的行为和属性。每个对象都有一个原型,原型也是一个对象,原型对象也有原型,以此类推,直到原型链的顶端。

原型链是JavaScript中对象继承的基础。当一个对象访问一个不存在的属性或方法时,JavaScript会沿着原型链向上查找,直到找到该属性或方法。

原型可以为对象增加新的属性和方法,从而实现对象之间的继承。

例如,我们可以创建一个Person对象,并为它添加一个name属性和一个greet方法:

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}.`);
};

现在,我们可以创建一个Student对象,并继承Person对象的属性和方法:

function Student(name, major) {
  Person.call(this, name);
  this.major = major;
}

Student.prototype = Object.create(Person.prototype);

现在,Student对象不仅具有自己的属性和方法,还继承了Person对象的属性和方法。

proto

__proto__属性是一个指向原型对象的指针。我们可以使用__proto__属性来访问和修改原型对象。

例如,我们可以使用以下代码来访问Student对象的原型对象:

const student = new Student("John Doe", "Computer Science");

console.log(student.__proto__ === Person.prototype); // true

构造函数

构造函数是用来创建对象的函数。构造函数的名称一般与对象名相同,并且第一个字母大写。

构造函数的作用是初始化对象并设置对象的属性和方法。

例如,我们可以使用以下代码来创建Student对象:

const student = new Student("John Doe", "Computer Science");

在上面的代码中,Student是构造函数,new用于创建一个新的Student对象,John DoeComputer Science是传递给构造函数的参数。

总结

原型、__proto__和构造函数是JavaScript原型链中的三个重要概念。通过对这些概念的理解,您可以更好地掌握JavaScript中对象和类的行为,并编写出更加优雅和高效的代码。

在下一篇文章中,我们将继续深入探讨JavaScript原型链,并介绍一些高级的用法。