【JavaScript】面向对象——构造函数(详解)

简介: 【JavaScript】面向对象——构造函数(详解)

理解并上手使用JavaScript中的构造函数

1、我们先理解什么是构造函数?

构造函数也称之为构造器,通常是我们在创建对象时会调用的函数;

在其他面向对象的编程语言里面,构造函数是是存在于类中的一个方法,称之为构造函数;

但是在JavaScript中的构造函数有点不太一样;

2、JavaScript中的构造函数是怎么样的?

构造函数也是一个普通的函数,从表现形式来说,和千千万万个普通的函数没有任何区别;

那么如果这么一个普通的函数被使用new操作符来调用了,那么这个函数就称之为构造函数;

如下示例代码所示:

function Foo (num) {
    console.log('foo~' + num)
}
// 普通方式调用
Foo() //  foo~
// 通过new关键字调用foo函数,此时这个函数就是构造函数
var f1 = new Foo(20) // foo~
console.log(f1) // foo {}   

上面的打印结果:foo是该函数的类型,{}是返回的空对象


3、使用new操作符会发生什么?

如果一个函数被使用new操作符调用了,那么它会执行如下操作:


在内存中创建一个新的对象(空对象);

这个对象内部的[[prototype]]属性会被赋值为该构造函数的prototype属性;

构造函数内部的this,会指向创建出来的新对象;

执行函数的内部代码(函数体代码);

如果构造函数没有返回非空对象,则返回创建出来的新对象。

function Person(){
}
var p1 = new Person()
var p2 = new Person()
console.log(p1) // Person {}

4、构造函数的属性

构造函数的属性实际上就是对象的变量。一个对象可以包含多个属性,定义构造函数的属性时使用this关键字。

示例代码如下:

// 构造函数的属性
function Person (name) {
    this.name = name
    this.sayMe = function () {
        console.log('我的名字叫' + this.name)
    }
}
// 利用构造函数创建对象
var spiderMan = new Person('彼得·本杰明·帕克')
console.log(spiderMan) // Person { name: '彼得·本杰明·帕克', sayMe: [Function] }
spiderMan.sayMe()  // 我的名字叫彼得·本杰明·帕克

5、构造函数与函数的区别

构造函数也是普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写。

构造函数和普通函数的区别在于:调用方式不一样。作用也不一样(构造函数用来新建实例对象)。

调用方式不一样。

a. 普通函数的调用方式:直接调用 person();

b.构造函数的调用方式:需要使用new关键字来调用 new Person()**;

构造函数的名称与类名相同:Person()这个构造函数,Person既是函数名,也是这个对象的类名。

构造函数的内部用this来构造属性和方法。


目录
相关文章
|
6月前
|
JavaScript 前端开发 Java
深入JS面向对象(原型-继承)(三)
深入JS面向对象(原型-继承)
53 0
|
5月前
|
设计模式 JavaScript 前端开发
在JavaScript中,继承是一个重要的概念,它允许我们基于现有的类(或构造函数)创建新的类
【6月更文挑战第15天】JavaScript继承促进代码复用与扩展,创建类层次结构,但过深的继承链导致复杂性增加,紧密耦合增加维护成本,单继承限制灵活性,方法覆盖可能隐藏父类功能,且可能影响性能。设计时需谨慎权衡并考虑使用组合等替代方案。
46 7
|
2月前
|
JavaScript 前端开发
JavaScript基础知识-构造函数(也称为"类")定义
本文介绍了JavaScript中构造函数(也称为“类”)的定义和使用方法。
35 1
JavaScript基础知识-构造函数(也称为"类")定义
|
3月前
|
存储 JavaScript 前端开发
JavaScript引用数据类型和构造函数的秘密
JavaScript引用数据类型和构造函数的秘密
|
5月前
|
设计模式 JavaScript 前端开发
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
JavaScript的继承机制基于原型链,它定义了对象属性和方法的查找规则。每个对象都有一个原型,通过原型链,对象能访问到构造函数原型上的方法。例如`Animal.prototype`上的`speak`方法可被`Animal`实例访问。原型链的尽头是`Object.prototype`,其`[[Prototype]]`为`null`。继承方式包括原型链继承(通过`Object.create`)、构造函数继承(使用`call`或`apply`)和组合继承(结合两者)。ES6的`class`语法是语法糖,但底层仍基于原型。继承选择应根据需求,理解原型链原理对JavaScript面向对象编程至关重要
135 7
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
|
4月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 构造函数模式
js设计模式【详解】—— 构造函数模式
42 6
|
6月前
|
前端开发 JavaScript
前端 JS 经典:Class 面向对象
前端 JS 经典:Class 面向对象
36 1
|
6月前
|
JavaScript
js中如何使用工厂方式和构造函数创建对象,web开发项目实例
js中如何使用工厂方式和构造函数创建对象,web开发项目实例
|
6月前
|
JavaScript 前端开发 索引
在JavaScript中,可以使用数组字面量或Array构造函数来创建一个数组对象
【4月更文挑战第16天】在JavaScript中,可以使用数组字面量或Array构造函数来创建一个数组对象
67 4
|
6月前
|
JavaScript 前端开发
JavaScript 原型链继承:掌握面向对象的基础
JavaScript 原型链继承:掌握面向对象的基础