一.工厂函数(了解) : 用于创建对象的函数
工厂函数是一个最后返回值是对象的函数,但它既不是类,也不是构造函数。在JavaScript中,任何函数都可以返回一个对象。但当函数没有使用new关键字时,那它便是一个工厂函数。
二.构造函数
使用new调用一个函数 , 构造函数作用与工厂函数一致,都是用来创建对象的。但是代码更加简洁。
三.构造函数new工作原理
(1)创建空对象
(2)this指向这个对象
(3)对象赋值
(4)返回这个对象
四.构造函数new在使用时需要注意的地方
- 构造函数首字母一般大写, 为了提醒调用者不要忘记new关键字
- 如果在构造函数内部 , 手动return return 值类型 : 无效 , 还是返回new创建的对象
return 引用类型 : 有效,会覆盖new创建的对象
五.代码演示
function Person(name, age, sex) {
// (1)创建空对象
// (2)this指向这个对象,this = {}
// (3)对象赋值
this.name = name
this.age = age
this.sex = sex
// (4)返回这个对象
}
// 调用者A
let p1 = new Person('张三', 23, '男')
console.log(p1)
// 调用者B
let p2 = new Person('王五', 45, '男')
console.log(p2)
六.总结new关键字
- 它创建一个新对象。这个对象的类型就是 object 。
- 它将这个新对象的内部不可访问的 [[prototype]] (即 proto )属性设置为构造函数的外部可访问 原型 对象(每个函数对象都会自动具有 prototype 属性)
- 它使this变量指向新创建的对象。
- 每当this提及时,它都会使用新创建的对象执行构造函数。
- 注意: 构造函数 是指new关键字后面的函数, 如 , new ConstructorFunction(arg1, arg2)
七.实现一个new
new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例 , new关键字会进行如下的操作:
1.创建一个空的简单JavaScript对象(即{});
2.链接该对象(即设置该对象的构造函数)到另一个对象;(通俗理解就是新对象隐式原型__proto__链接到构造函数显式原型prototype上)
3.将步骤1新创建的对象作为this的上下文;(实际是执行了构造函数 , 并将构造函数作用域指向新对象)
4.如果该函数没有返回对象,则返回this。(实际是返回一个空对象,new Object()就是返回一个空对象{})
八.Javascript关键字列表:(拓展)
break delete function return typeof
case do if switch var
catch else in this void
continue false instanceof throw while
debugger finally let ``new true with
default for null try``const