创建对象的方式
1.字面量的方式
let obj = {
name: '张三',
age: 18
}
console.log(obj) // {name: '张三', age: 18}
2.内置构造函数的方式
let obj = new Object()
obj.name = '张三'
obj.age = '13'
console.log(obj) //{name: '张三', age: '13'}
3.工厂函数
function createObj (name, age) {
// 3.1 手动创建一个对象
const obj = {}
// 3.2 手动向对象内部添加一些属性
obj.name = name
obj.age = age
// 3.3 手动返回一个对象
return obj
}
const res1 = createObj('QF001', 18)
console.log(res1) //{name: 'QF001', age: 18}
const res2 = createObj('QF002', 28)
console.log(res2) //{name: 'QF002', age: 28}
4.自定义构造函数
/**
* 自定义构造函数的书写
*
* 1. 构造函数的函数名 建议首字母大写 (为了和普通函数做一个区分)
* 2. 构造函数将来在调用的时候, 必须和 new 关键字 一起使用 (必须这样写)
* 3. 构造函数内部不需要书写 return
* 如果 手动返回了 基本数据类型, 那么写了和没写一样
* 如果 手动返回了 引用数据类型, 那么写了之后构造函数失效
* 4. 构造函数在使用的时候 内部 的 this 规则和之前的函数不太一样
(重点!!!)
* 因为一个函数要想当成构造函数去使用, 那么必须要和 new 关键字一起使用
* 如果一个函数和 new 关键字一起使用, 那么内部的 this 就指向函数中被
创建出来的对象
*
* 构造函数内部的 this 指向于 函数内部自动创建出来的那个对象
*
* 5. 构造函数不能使用箭头函数, 因为箭头函数内部没有 this
*/
function Person () {
this.name = 'QF001'
this.abc = 10086
}
const res = new Person()
console.log(res) //Person {name: 'QF001', abc: 10086}