目录
创建对象的三种方式
利用对象字面量创建对象
例:
const o = {name : ‘佩奇’}
利用new Object创建对象
例:
const o = new Object({name : ‘佩奇’})
console.log(o) // {name : ‘佩奇’}
利用构造函数创建对象
构造函数
构造函数是一种特殊的函数,主要用来初始化对象
使用场景:常规的语法允许创建一个对象,比如,继续创建另一个对象要重新写一遍,此时可以通过构造函数来快速创建多个类似的对象
例:
function Pig(name,age,gender) {
this.name = name
this.age = age
this.gender = gender
}
const Peppa = new Pig(‘佩奇’, 6 , ‘女’) // 创建佩奇对象
const George = new Pig(‘乔治’, 3 , ‘男’) // 创建乔治对象
构造函数技术上是常规函数
不过有两个约定:
- 它们的命名以大写字母开头
- 它们只能由“new”操作符来执行
说明:
- 使用new关键字调用函数的行为被称为实例化
- 实例化构造函数时没有参数可以省略
- 构造函数内部无需写return,返回值即为新创建的对象
- 构造函数内部的return返回值无效,所以不要写return
- new Object()、new Date()也是实例化构造函数
实例化执行过程
例:
- 创建构造函数
function Pig(name) {
this.name = name
}
- new关键字调用函数
new Pig(‘佩奇’)
接受创建的对象
const peppa = new Pig(‘佩奇’)
console.log(peppa) // {name : ‘佩奇’}
说明:
- 创建新空对象
- 构造函数this指向新对象
- 执行构造函数代码,修改this,添加新的属性
- 返回新对象
实例成员&静态成员
实例成员
实例成员:通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员
例:
// 构造函数
function Person() {
// 构造函数内部的this就是实例对象
// 实例对象中动态添加属性
this.name = ‘小明’
// 实例对象动态添加方法
this.asyHi = function() {
console.log(‘大家好’)
}
}
// 实例化,p1是对象
// p1实际就是构造函数内部的this
const p1 = new Person()
console.log(p1)
console.log(p1.name) // 访问实例属性
p1.sayHi() // 调用实例方法
说明:
- 实例属性的属性和方法即为实例成员
- 为构造函数传入参数,动态创建结构相同但值不同的对象
- 构造函数创建的实例对象彼此独立不影响
静态成员
静态成员:构造函数的属性和方法被称为静态成员
例:
// 构造函数
function Person(name,age) {
// 省略实例成员
}
// 静态属性
Person.eyes = 2
Person.arms = 2
// 静态方法
Person.walk = function() {
console.log(‘人都会走路’)
console.log(this.eyes) // this指向Person
}
说明:
- 构造函数的属性和方法被称为静态成员
- 一般公共特征的属性或方法静态成员设置为静态成员
- 静态成员方法中的this指向构造函数本身