返回

原型对象的前世今生——function.prototype,了解一下?

前端

一、认识 function.prototype

在 JavaScript 中,每个函数都有一个 prototype 属性,它指向一个对象,该对象包含该函数的所有属性和方法。

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

Person.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};

const person1 = new Person('John', 25);
person1.sayHello(); // Hello, my name is John and I am 25 years old.

在上面的示例中,Person.prototype 是一个对象,包含 sayHello 方法。当我们使用 new 运算符创建一个 Person 对象时,该对象会继承 Person.prototype 上的所有属性和方法。因此,person1 可以访问 sayHello 方法,并能够输出 "Hello, my name is John and I am 25 years old."。

二、function.prototype 的属性和方法

function.prototype 对象包含许多有用的属性和方法,其中包括:

  • constructor :指向该原型的构造函数。
  • hasOwnProperty :用于检查对象是否包含指定属性。
  • isPrototypeOf :用于检查一个对象是否为另一个对象的原型。
  • propertyIsEnumerable :用于检查对象的属性是否可枚举。
  • toLocaleString :将对象转换为字符串。
  • toString :将对象转换为字符串。
  • valueOf :将对象转换为基本值。

三、function.prototype 的用法

function.prototype 可以用于多种目的,其中包括:

  • 添加方法到所有对象 :我们可以使用 function.prototype.methodName = function() { ... } 的方式向所有对象添加新方法。例如,我们可以向所有对象添加一个 log 方法,如下所示:
Function.prototype.log = function() {
  console.log(this);
};

const person1 = new Person('John', 25);
person1.log(); // { name: 'John', age: 25 }
  • 创建新的构造函数 :我们可以使用 new Function(arg1, arg2, ..., body) 的方式创建一个新的构造函数。例如,我们可以创建一个 Animal 构造函数,如下所示:
const Animal = new Function('name', 'age', `
  this.name = name;
  this.age = age;
`);

const animal1 = new Animal('Dog', 5);
animal1.log(); // { name: 'Dog', age: 5 }

四、原型对象的神秘面纱

function.prototype 是一个神秘的对象,它包含了许多有用的属性和方法。它可以用于多种目的,包括添加方法到所有对象、创建新的构造函数等。了解 function.prototype 可以帮助我们更好地理解 JavaScript 中的对象和原型系统。