用new操作符调用函数
- 现在,我们学习一种新的函数调用方式:
JS规定,使用new操作符调用函数会进行“四步走”:
1)函数体内会自动创建出一个空白对象。
2)函数的上下文(this)会指向这个对象。
3)函数体内的语句会执行。
4)函数会自动返回上下文对象,即使函数没有return语句。
四步走详解 - 第1步
- 第1步:函数体内会自动创建出一个空白对象。
四步走详解 - 第2步
- 第2步:函数的上下文(this)会指向这个对象。
四步走详解 - 第3步
- 第3步:执行函数体中的语句。
四步走详解 - 第4步
- 第4步:函数会自动返回上下文对象,即使函数没有return语句。
上下文规则总结
规则 | 上下文 |
---|---|
对象.函数() | 对象 |
函数() | window |
数组[下标]() | 数组 |
IIFE | window |
定时器 | window |
DOM事件处理函数 | 绑定DOM的元素 |
call和apply | 任意指定 |
用new调用函数 | 秘密创建出的对象 |
什么是构造函数
- 用new调用一个函数,这个函数就被称为“构造函数”,任何函数都可以是构造函数,只需要用new调用它。
- 顾名思义,构造函数用来“构造新对象”,它内部的语句将为新对象添加若干属性和方法,完成对象的初始化。
- 构造函数必须用new关键字调用,否则不能正常工作,正因如此,开发者约定构造函数命名时首字母要大写。
一定要记住:一个函数是不是构造函数,要看它是否用new调用,而至于名称首字母大写,完全是开发者的习惯约定。
构造函数中的this不是函数本身。
尝试为对象添加方法
类与实例
构造函数和“类”
- Java、C++等是“面向对象”(object-oriented)语言。
- JavaScript是“基于对象”(object-based)语言。
- JavaScript中的构造函数可以类比于OO语言中的“类”,写法的确类似,但和真正OO语言还是有本质不同,JS有和其他OO语言完全不同的、特有的原型特性。