1. 对象需要分类吗?创建对象new X()
理由1:
- 有很多对象拥有一样的属性和行为,需要把他们分为同一类
- 创建类似对象的时候就很方便
理由2:
- 还有很多对象拥有其他的属性和行为,就需要不同的分类
new X()
let obj = new Object({'name': 'frank'}) //正规写法
new X()自动做了四件事情:
- 自动创建空对象
- 自动为空对象关联原型,原型地址指定为X.prototype
- 自动为空对象作为this关键字运行构造函数
- 自动return this
构造函数 X
- X 函数本身负责给对象本身添加属性
- X.prototype对象负责保存对象的共用属性
原型公式 对象x.proto ===构造函数X.prototype
举例:
function Dog(name){
this.name = name
this.color = '白'
this.kind = '萨摩耶'
}
Dog.prototype.wangwang = function(){console.log('旺旺')}
Dog.prototype.run = function(){console.log('狗在跑')}
let dog1 = new Dog('小白')
dog1
Dog {name: '小白', color: '白', kind: '萨摩耶'}
color: "白"
kind: "萨摩耶"
name: "小白"
[[Prototype]]: Object
run: ƒ ()
wangwang: ƒ ()
constructor: ƒ Dog(name)
[[Prototype]]: Object
2. 数组对象
let arr3 = new Array(1,2,3) //传三个参数
arr3 //元素为1,2,3
let arr1 =new Array(3) //传一个参数
arr1 //结果为长度为3的空数组
let arr2 =new Array(3,5) //传两个参数
arr2 //结果为长度为2的数组,arr2[0]为3,arr2[1]为5
2.1 数组对象的自身属性:
基于数组也是特殊的对象,所以arr3这个数组对象的属性名为字符串'0','1','2' ,对应的属性值为数字1,2,3
2.2 数组对象的共用属性: push/pop/shift/join/concat
arr.push(4) //添加4到数组中
arr //[1,2,3,4]
arr.pop() //从数组中末尾依次弹出(删除)
arr //[1,2,3]
arr.shift() //从数组中删除第一个元素
arr.unshift() //将1个或多个元素添加到数组的开头,返回数组的新长度
arr.join() //连起来
arr = [1,2,3,4]
arr.join('方') //结果为"1方2方3方4"
arr3 = [3,3,3]
arr4 = [4,4,4,4]
arry3.concat(arr4) //结果为[3,3,3,4,4,4,4]