当前位置:  首页>> 技术小册>> JavaScript面试指南

在JavaScript中,每个对象都有一个称为原型(Prototype)的内部属性。原型是一个对象,它包含一些共享的属性和方法,可以被该对象的所有实例访问。每个JavaScript对象都有一个原型,除了原型链的顶端——Object.prototype。原型链是一种对象之间的关系,它是由原型构成的链式结构,可以通过原型链访问到其他对象的属性和方法。

当我们访问一个对象的属性时,JavaScript引擎会首先在该对象本身上查找,如果找不到,它会沿着该对象的原型链向上查找,直到找到该属性为止。如果在原型链的最顶端(即Object.prototype)还没有找到该属性,则返回undefined。

以下是一个原型和原型链的示例代码:

  1. // 定义一个Person构造函数
  2. function Person(name, age) {
  3. this.name = name;
  4. this.age = age;
  5. }
  6. // 为Person的原型添加一个greet方法
  7. Person.prototype.greet = function() {
  8. console.log(`Hello, my name is ${this.name}, I am ${this.age} years old.`);
  9. }
  10. // 创建一个Person实例
  11. const person = new Person('Tom', 20);
  12. // 调用greet方法
  13. person.greet(); // 输出:Hello, my name is Tom, I am 20 years old.
  14. // 输出person对象的原型
  15. console.log(Object.getPrototypeOf(person)); // 输出:Person { greet: [Function] }
  16. // 输出Person函数的原型
  17. console.log(Object.getPrototypeOf(Person)); // 输出:[Function]

在这个示例中,我们定义了一个Person构造函数,它有两个属性:name和age。然后,我们为Person的原型添加了一个greet方法。接着,我们创建了一个person对象,并调用了它的greet方法。在调用greet方法时,JavaScript引擎会首先在person对象上查找该方法,由于该方法不存在,它会沿着person对象的原型链向上查找,在Person.prototype上找到了该方法并调用。最后,我们使用Object.getPrototypeOf方法获取了person对象和Person函数的原型。

原型和原型链的特点包括:

  • 原型是一个对象,它包含一些共享的属性和方法,可以被该对象的所有实例访问。
  • 所有JavaScript对象都有一个原型,除了原型链的顶端——Object.prototype。
  • 原型链是由原型构成的链式结构,可以通过原型链访问到其他对象的属性和方法。
  • 当访问一个对象的属性时,JavaScript引擎会首先在该对象本身上查找,如果找不到,它会沿着该对象的原型链向上查找,直到找到该属性为止。如果在原型链的最顶端(即Object.prototype)还没有找到该属性,则返回`

该分类下的相关小册推荐: