面向对象
面向对象:(本质就是对面向过程的封装)
- 是一种注重解决结果的问题 思维方式
- 面向过程:注重的是过程
- 面向对象:注重的是结果
面向对象
- 函数封装:把冗余代码放入函数中
- 弊端:全局变量污染
- 变量名太多,导致增加重名的风险,代码会被覆盖。
- 对象封装:把函数作为对象的方法
面向过程:(注重过程)
- 特点:代码冗余
内置对象
- 含义:js作者提前封装好的对象
数组对象
arr.concat(数组)
作用:把两个数组连接成一个数组
应用:一般用于长列表(下一页)不断往后面进行拼接数组
arr.reverse()
作用:翻转数组
应用:价格从低到高,切换成从高到低,只需要翻转数据
arr.join(‘分隔符’)
作用:把数组每一个元素拼接成字符串
应用:有些歌曲多人合唱,服务器会给我们一个按钮,这个时候需要将数组元素通过join拼接起来,然后再页面显示
arr.sort(function(a,b{return a-b})
作用:排序
return a-b 从小到大
return b-a 从大到小
字符对象
str.length或者str[4]
作用:字符串类似于数组,有长度和下标
str.indexOf(‘字符串’)
作用:获取”字符串“在str中首字母下标
如果字符串存在首字母下标则返回字母下标,如果字符串不存在则返回固定值-1
应用:检查一个字符串中是否有 某个字符
split(‘分隔符’) : 切割字符串
//返回值一定是数组 : 元素对应切割的每一个部分
let str1 = '我&爱*你'
console.log( str1.split('&') )//['我', '爱*你']
console.log( str1.split('*') )//['我&爱', '你']
console.log( str1.split('=') )//['我&爱*你']
//应用: 解析url中的参数(了解即可)
// 'http://www.baidu.com?name=张三&age=20' 得到 { name:'张三',age:20 }
str.substr(起始下标,截取长度)
作用:截取字符串
应用:返回截取所需要的值
’字符串“.toLocalLowerCase()‘小写转换
’字符串“.toLocaleUpperCase()‘大写转换只针对英文,中文无效
作用:大小写转换
应用:字母验证码,不区分大小写
构造函数
-
构造函数工作原理:
- 创建空数组
- this指向这个对象
- 对象赋值
- 返回这个对象(return)
-
注意点:
-
构造函数首字母一般大写,为了提醒调用者不要忘记加new关键字
-
构造函数主动写return :
值类型 : 无效,还是返回new创建的对象
(数组)引用类型:有效。 会覆盖new创建的对象
-
-
弊端:
- 如果使用构造函数,里面还有函数执行,每次创建都要创建一个对空间,这样就导致内存资源的浪费
原型对象(构造函数名.prototype)
含义:任何函数在声明的时候,系统会自动帮你创建一个对象。
作用:弥补构造函数的内存浪费+全局变量污染
原型对象的三个属性:构造函数、原型对象、实例对象
prototype : 属于构造函数,指向原型对象
* 作用:解决内存浪费+变量污染
proto : 属于实例对象
,指向原型对象
* 作用: 实例对象 访问 原型对象的成员
constructor:属于原型对象
,指向构造函数
* 作用:可以让实例对象知道自己的构造函数是谁
//person是构造函数 也叫他爸 person.prototype指向的是原型函数 也叫他妈
//原型函数 也叫他妈 用 person.prototypr表示 原型函数.constructor 就等于他爸
//实例对象 也叫我 p1.__proto__ 表示他妈 p1.__proto__.constructor 就是等于他爸
object的value的方法
静态成员: 函数的属相
实例成员: 实例对象的属性
function Person(name,age){
this.name = name
this.age = age
}
//静态成员
console.log( Person.prototype )
Person.aaa = '111'//静态
console.dir( Person )
//实例成员
let p1 = new Person('ne',30)
console.log( p1.name )//实例
console.log( p1.age )//实例
-
静态方法 objecct.value(对象名)
返回一个数组,会储存对象的每一个属性值