javascript——构造函数

  • 2019-04-22
  • 61
  • 0

构造函数

构造函数其实是函数中的一种,前面就有提到过,看了下MDN对其介绍的不多

定义
在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。(一般首字母大写)

作用
在使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复的代码,而使用构造函数就可以实现代码的复用。

// 不用构造函数
var a1 = {name: '1', sex: '0'}
var a2 = {name: '2', sex: '1'}
var a3 = {name: '3', sex: '0'}
// 使用构造函数
function Person(name, sex) {
this.name = name
this.sex = sex
}
// 彰显逼格的时候到了
var a4 = new Person('4', '0')

下面说下构造函数,原型和实例之间的关系

每个构造函数(constructor)都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针,而实例(instance)都包含一个指向原型对象的内部指针.

上面是摘自红宝书的中的原文。

看下图:

Person: 构造函数(constructor),也就是上面代码中的,
原型对象:在控制台中打印Person.prototype,可以看出是一个对象{ constructor: ƒ }, 这个f就是function Person() {...},
实例(instance): 实例的产生需要通过new 一个构造函数赋值给person1,通过控制台,我们可以看到person1表现为Person {name: 1, sex: 2},

现在你大致了解了他们的关系了吧。

那么new 构造函数具体做了什么,简单解析下

1. 创建空对象 obj {},
2. obj.__proto__ = Person.prototype 
    // 赋值隐式原型,这一步有点相当于手动继承的意思
3.  Person.call(obj) 
    // 这一步是通过call将构造函数的作用域赋给新对象
4. return obj

评论

还没有任何评论,你来说两句吧

- 友情链接 - Theme by Qzhai