学习:JS进阶[10]内置构造函数

一.内置构造函数

1.基本包装类型

把基本数据类型包装成了复杂数据类型

a.

**引用类型:**Object,Array,RegExp,Date等

包装类型:String,Number,Boolean等

2.Object

a.三个常用静态方法(静态方法就是只有构造函数Object可以调用)

作用 :Object.keys静态方法中获取对象中所有属性键

b.语法:获得所有的属性值

javascript 复制代码
const o={uname:'嘿嘿',age:18}
Object.keys(o)
//返回的值是一个数组['uname','age']

c.获取所有的值

javascript 复制代码
Object.values(o)
//返回的是一个数组['嘿嘿',18]

d.对象拷贝

javascript 复制代码
//对象拷贝
const obj={}
Object.assign(obj,o)//将o对象拷贝到obj对象
Object.assign(o,{gender:'女'})
  • **作用:**Object.assign静态方法常用于拷贝对象
  • 使用: 经常使用的场景给对象添加属性

3.Array

|---------|----------|-----------------------------------------|
| 方法 | 作用 | 说明 |
| forEach | 遍历数组 | 不返回数组,经常用于查找遍历数组元素 |
| filter | 过滤数组 | 返回新数组 ,返回的事筛选满足条件的数组元素 |
| map | 迭代数组 | 返回新数组 ,返回的是处理之后的数组元素,需要使用返回的新数组 |
| reduce | 累计器 | 返回leiji处理的结果,经常用于求和等 |

a.作用:reduce 返回累计处理的结 果,经常用于求和等

b.基本语法:

javascript 复制代码
arr.reduce(function(){},起始值)

arr.reduce(function(上一次值,当前值){},初始值)

const arr=[1,2,3,4]

例子:

javascript 复制代码
 const arr = [1, 2, 3]
   // 1.没有初始值
    const total = arr.reduce(function (prev, current) {
      return prev + current
    })
    console.log(total)//6


  //2.有初始值
     const total = arr.reduce(function (prev, current) {
       return prev + current
     }, 10)
     console.log(total)//16

//3.箭头函数写法
    const total = arr.reduce((prev, current) => prev + current, 10)
    console.log(total)//16

c.执行过程

  1. 没有初始值,则上一次值以数组的第一个数组元素的值
  2. 每一次循环,把返回值给值给做为下一次循环的上一次值
  3. 有起始值,则起始值为上一次值

d.其他方法

前三个了解,后面的自查

e.伪数组转换为真数组

静态方法Array.from()

4.String

a.split把字符串转换为数组

javascript 复制代码
const str='嘿嘿,哈哈'
const arr=str.split(',')

b.字符串的截取 substring(开始的索引号[,结束的索引号])

javascript 复制代码
const str='今天开始我要自己上厕所'
//如果省略了结束的索引号,默认取到最后
str.substring(4)//输出:我要自己上厕所

结束的索引号不包含在内

开始的索引号包含在内

c.其他方法

|-----------------------------------|-----------------------|----------|
| 方法 | 说明 | 返回值 |
| length | 用来获取字符串的长度 | 数值 |
| split('分隔符') | 用来将字符串拆分成数组 | 数组 |
| substring(首索引[,末索引]) | 用于截取字符串 | 字符串 |
| startsWith(检测字符串[,检测位置索引号]) | 检测是都以某字符开头 | 布尔类型 |
| includes(搜索的字符串[,检测位置索引号]) | 判断一个字符串是否包含另一个字符串 | 布尔类型 |
| tpUpperCase | 将字母转换成大写 | 字符串 |
| toLowerCase | 用于将就转换成小写 | 字符串 |
| indexOf | 检测是否包含某字符 | 返回下标 |
| endsWith | 检测是否以某字符结尾 | 布尔类型 |
| replace | 用于替换字符串,支持正则匹配 | 字符串 |
| match | 用于查找字符串,支持正则匹配 | 数组 |

5.Number

toFixed()

  1. 括号里设置保留小数位的长度
  2. 四舍五入

二.构造函数

公共的属性和方法 封装到构造函数里

javascript 复制代码
//例如
function Star(uname,age){
this.uname=uname
this.age=age
this.sing=function(){
console.log('唱歌')
}
}

三.原型

1.目标

  • 构造函数通过原型分配的函数是对所有对象所共享的
  • 每一个构造函数都有一个prototype属性 ,指像另一个对象,所以我们也称为原型对象
  • 这个对象可以挂载函数,对象实例化不会多次创建原型上函数
  • 我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法
  • 构造函数和原型对象中this都指向实例化的对象

公共的属性卸载构造函数里,公共的方法写在原型对象

javascript 复制代码
//公共属性写在构造函数
function Star(uname,age){
this.uname=uname
this.age=age

}
//公共的方法写到原型对象
Star.prototype.sing=function(){
console.log('唱歌')
}

2.constructor属性

a.每一个原型对象都有的属性,该属性指向该原型对象构造函数,即

Star.prototype.constructor===Star

3.对象原型

a.在每一个对象里面都有一个属性__proto__(前后分别两个下划线)

b.注意

  • 只读,不能修改
  • \[prototype\]\]等于__proto__

  • proto(对象原型)里面也有一个constructor属性,指向创建该实例对象的构造函数

4.原型继承

a.借助原型对象来继承

公共的 部分放到原型上

javascript 复制代码
//抽取人
const Person={
eyes:2,
head:1
}

//定义 女人的构造函数  并且继承Person
function Woman(){

}
//继承person
Woman.prototype=Person
//指会原来的构造函数
Woman.prototype.constructor=Woman

5.原型链

a.原型链--查找规则

  1. 当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性
  2. 如果没有就查找它的原型(也就是proto 指向的 prototype 原型对象)
  3. 如果还没有就查找原型对象的原型(0bject的原型对象)
  4. 依此类推一直找到 Object 为止(null)
  5. proto 对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线
  6. 可以使用 instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上