构造函数的书写和使用
明确:构造函数也是,只不过是在调用的时候和 new 关键字连用了
目的:就是为了创建一个 有属性 有方法 合理的 对象
- 调用必须有 new 关键字
=> 如果没有,那么没有创建对象的能力
=> 只要有,就会自动创建一个对象
// 1. 必须和 new 关键字连用
function fn(){}
let o1=new fn()
console.log(o1) // 会生成一个对象 fn{}
let o2=fn()
console.log(o2) // undefined
- 不要再构造函数内部写 return
=> 如果写了基本数据类型 写了白写
=> 如果写了引用数据类型 构造函数白写
// 2. 不要写return
function fn(){
// 基本数据类型写了白写
// return 123
// 引用数据类型 构造函数白写
// return []
}
let o1=new fn()
console.log(o1) //返回一个 fn{}
- 构造函数在调用的时候,如果不传递参数,最后小括号可以不写
=>但是推荐我们都写上
// 3. 不传递参数,(), 可以不写
function fn(){}
let o1=new fn()
let o2=new fn
- 构造函数推荐首字母大写
=> 是为了直观看出和普通函数的区别
=> 看到首字母大写的函数基本上就要和new连用
// 4. 首字母大写
function Fn() { }
function fn() { }
- 当函数和new 关键字连用
=> 会创造对象,我们关创造出来的对象叫实例对象
=> 我们关创造出来的过程叫做 实例化 过程
=> 构造函数体内的 this 指向实例对象
=> 也就是本次 new 的时候创建的那个对象
// 5.当函数和new 关键字连用this指向
function Person(name){
this.name=name
this.sayHi=function(){console.log("hello World")}
}
// 本次 new 的时候 Person 会创造一个对象
// 把创造出来的对象赋值给了 变量 P1
// 我们关 p1 叫做 Person 的实例化对象
// 本次调用的时候,Person 的 this指向P1
let p1=new Person("错i")
// 本次 new 的时候 Person 创造第二个对象
// 赋值给了p2 变量
// p2 也是Person 的实例化对象
// 本次调用的时候,Person 的 this指向P2
let p2=new Person("局部地区有黑洞")
p1.sayHi()
p2.sayHi()