创建对象的方式:
1、利用对象字面量{}创建
const arr = {
name: 'tom',
age: 18
}
2、利用js内置构造(Object,Array,String,Number)函数
var obj = new Object() //创建一个空的对象
obj.uname = 'tom'
obj.age = 20
console.log(obj) // {uname: 'tom', age: 20}
3、利用自定义的构造函数
function Pig(name,age) {
this.name = name
this.age = age
}
const arr = new Pig('john',12)
console.log(arr) // {name: 'john', age: 12}
构造函数是一周你那个特殊的函数,主要用来创建对象,可以通过构造函数快速创建多个类似对象。构造函数的首字母要大写,构造函数需要与new一起使用。
使用new关键字调用函数的行为被称为实例化。
实例化构造函数的时候,没有参数可省略()。
实例化执行过程:
1、创建新的空对象
2、构造函数this指向新对象
3、执行构造函数代码
4、返回新对象
实例成员:实例对象中的属性和方法(实例属性和实例方法)
静态成员:构造函数的属性和方法(静态属性和静态方法)
内置构造函数Object--用于创建普通对象
1、Object.keys(obj)
获取对象中所有属性,返回的是一个数组
2、Object.values(obj)
获取对象中所有属性值,返回的是一个数组
3、Object.assign(obj)
拷贝对象
var obj = new Object() //创建一个空的对象
obj.uname = 'tom'
obj.age = 20
console.log(obj) // {uname: 'tom', age: 20}
console.log(Object.keys(obj)) // ['uname', 'age']
console.log(Object.values(obj)) // ['tom', 20]
console.log(Object.assign(obj)) // {uname: 'tom', age: 20}
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(returnedTarget) // {a: 1, b: 4, c: 5}
内置构造函数Array--用于创建数组
1、Array.map()
迭代数组,返回新数组
const list = ['tom',18]
const str = list.map(item => {
return item + '和'
}).join(',')
console.log(str) // tom和,18和
2、Array.filter()
筛选数组
const list = [1,2,3,4,5,6,5]
console.log(list.filter(item=> item < 4)) // [1, 2, 3]
3、Array.reduce
数组元素求和
const list = [1,2,3,4,5]
console.log(list.reduce((a,b) => a + b)) // 15
const list = [1,2,3,4,5]
console.log(list.reduce( function(a,b) { return a+b }, 10)) // 25
4、Array.forEach()
遍历数组
const list = ['tom',18]
list.forEach(item => {
console.log(item) // tom 18
})
构造函数体现了面向对象的封装特性。
构造函数存在的问题:
1、浪费内存
2、构造函数中函数会多次创建,占用内存