前端面试必备 | 使用原型和构造函数创建对象(原型篇:上)

本文探讨JavaScript中如何使用构造函数和原型实现面向对象编程,解释了构造函数创建对象的问题,介绍了原型对象及其属性,阐述了原型链的工作原理,并通过示例展示了原型存在的问题及如何组合使用构造函数和原型来解决这些问题。
摘要由CSDN通过智能技术生成

本文翻译自 https://medium.com/better-programming/prototypes-in-javascript-5bba2990e04b,作者 Rupesh Mishra,翻译时有删改,标题有改动。

在这篇文章中,我们将会讨论 JavaScript 中的原型是什么,以及在 JavaScript 中如何实现面向对象编程。

使用构造函数 constructor 创建对象的问题

看看下面的代码:

function Human(firstName, lastName) {
  this.firstName = firstName,
  this.lastName = lastName,
  this.fullName = function() {
    return this.firstName + " " + this.lastName;
  }
}
var person1 = new Human("Virat", "Kohli");
console.log(person1)

我们使用 Human 构造函数创建 person1person2 两个对象:

var person1 = new Human("Virat", "Kohli");
var person2 = new Human("Sachin", "Tendulkar");

当执行上面的代码之后,JavaScript 引擎将会创建两个该构造函数的拷贝,一个是 person1 另一个是 person2

构造函数创建对象

从图中可以看出,每个对象都拥有 firstName lastName fullName 这三个属性。每个使用构造函数创建的对象都会拥有自己的属性和方法,但是我们没有必要声明多个 fullName 函数,这会浪费内存。接下来,我们看看如何解决这个问题。

原型

在 JavaScript 中创建一个函数的时候,JavaScript 引擎会添加一个 prototype 属性给这个函数,这个 prototype 属性指向一个对象,这就是我们所说的原型对象。原型对象默认会有一个 constructor 属性,这个 constructor 指向的就是有 prototype 属性的函数。看下面的图示:

如上图,Human 构造函数有一个 prototype 属性指向原型对象。而原型对象有一个 constructor 属性又指回了这个构造函数。让我们看下面的代码:

function Human(firstName, lastName) {
  this.firstName = firstName,
  this.lastName = lastName,
  this.fullName = function() {
    return this.firstName + " " + this.lastName;
  }
}
var person1 = new Human("Virat", "Kohli");
console.log(person1)
输出的结果

通过下面的代码访问 Human 构造函数的原型属性:

console.log(Human.prototype)

从上面的图片可以看出,函数的原型属性是一个有两个属性的对象(原型对象&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值