我们经常会听到说编程一定要有面向对象的思想,那么什么是面向对象呢?赶紧来认识一下吧。
面向对象
面向对象和基于对象
- 面向对象
- 可以创建自定义的类型、很好的支持继承和多态。
- 面向对象的语言c++/java/c#...
- 面向对象的特征:封装、继承、多态
- 万物皆对象,世间的一切事物都可以用对象来描述
- 基于对象
- 无法创建自定义的类型
- 不能很好的支持继承和多态
- 基于对象的语言JavaScript
- 但是:js可以模拟面向对象,本身不具备面向对象的特征。
js中的对象
- js中的对象就是无序属性的集合。 其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。
- 对象的行为和特征
- 特征---属性
- 行为---方法
- 如何创建对象: 使用关键字:new Object();此时在内存中开辟了一块空间,并且创建了一个没有任何属性和方法的对象。 创建多个对象,我们就需要使用函数了。
var phone=new Object();//开辟空间,返回新的创建的对象 phone.color="red"; phone.size="n98"; phone.weight="5g"; phone.call=function () { console.log("打电话"); }; phone.kanDianYing=function () { console.log("看电影"); };
构造函数
- 构造函数的本质就是一个函数,只不过构造函数的目的是为了创建新对象,为新对象进行初始化(设置对象的属性)
- 构造函数解释 构建一个对象并且返回。
- 函数和方法的区别
- 函数:直接调用的
- 方法:对象调用的 实际上了解越多你就会发现,函数和方法是一样的,但是前期的时候你需要区分一下帮助理解。
function createObject(name,age,sex) { var student=new Object();//创建对象 student.name=name; student.age=age; student.sex=sex; student.sayHello=function () { console.log("您好,我是"+this.name+"年龄:"+this.age+"性别:"+this.sex); }; return student;}var stu1=createObject("小黑",18,"男");//创建对象1var stu2=createObject("小白",18,"女");//创建对象2
json
- SON和对象字面量的区别
- JSON的属性必须用双引号引起来,对象字面量可以省略
- 区别:json键有双引号,json仅仅是数据的一种描述形式而已,一种规范,所以,不同语言之间都可以使用,将来解析数据的时候不带双引号会出错的。
数据赋值
- 基本类型的值存储在栈空间中,复杂类型的对象存储在堆空间中,对象的地址(引用)存储在栈空间中。
- 赋值
基本类型赋值后,修改num1变量的值,num2变量的值不改变;
引用类型赋值,赋值的是地址,修改stu1对象的属性值,stu2对象的属性值会发生改变。
引用数据类型
也叫复杂数据类型。
Array
- toString()
- charAt() //获取指定位置处字符
- charCodeAt() //获取指定位置处字符的ASCII码
- concat() //拼接字符串,等效于+,+更常用
- slice() //从start位置开始,截取到end位置,end取不到
- join方法可以把数组中的每个元素用特殊符号分隔,返回一个新的字符串
- push()
- pop()取出数组中的最后一项,修改length属性 队列操作(先进先出)
- shift()取出数组中的第一个元素,修改length属性
- unshift()在数组最前面插入项,返回数组的长度
- reverse()反转数组
- sort()数组排序,从小到大
- concat方法:添加参数产生新的数组
- slice() //从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
- substring() //从start位置开始,截取到end位置,end取不到
- substr() //从start位置开始,截取length个字符
- plice()//删除或替换当前数组的某些项目,参数start,deleteCount,options(要替换的项目)
- indexof方法从某个下标开始找
- trim() //只能去除字符串前后的空白
- to(Locale)UpperCase() //转换大写
- to(Locale)LowerCase() //转换小写
- every方法,判断数组中的每一项是否都满足条件,如果满足则返回true,否则返回false
- filter方法,判断数组中的每一项是否都满足条件,如果满足则返回新数组
- foreach方法遍历数据
- map方法对每个元素进行操作,返回新的数组
- some方法判断是否满足条件
- 数组中有些方法有兼容性,可在MDN中查找其兼容代码复制即可。
日期对象Date(javascript内置对象)
- 日期格式化方法
- toString()
- valueOf() -- 返回时间对象对应的毫秒数字,因此可以直接使用 > < 判断两个时期的大小
- toDateString()
- toTimeString()
- toLocaleDateString()
- toLocaleTimeString()
- 注意:不同的浏览器,各种toString()返回的结果不一致。
- 获取日期中指定部分
- getTime() 返回毫秒数和valueOf()结果一样
- getMilliseconds() //毫秒
- getSeconds() 返回0-59
- getMinutes() 返回0-59
- getHours() 返回0-23
- getDay() 返回星期几 0周日 6周6
- getDate() 返回当前月的第几天
- getMonth() 返回月份,从0开始
- getFullYear() 返回4位的年份 如 2016
Math对象
Math对象中提供了很多静态的属性和方法
- 属性 Math.PI
- 方法
- Math.min()
- Math.max()
- Math.ceil() 天花板
- Math.floor() 地板
- Math.round() 四舍五入
- Math.random() 随机数 [0-1)
- parseInt( Math.random() * 10 + 1) [1-10]
- parseInt( Math.random() * 9 + 2) [2-10]
- Math.abs()
- Math.power(num,power) num的power次幂
- Math.sqrt(num) num开平方
- Math.sin()
- Math.cos()
注意点
- 函数的参数个数不是定义函数的时候,而是调用函数的时候确定的;
- sqrt:判断一个数是不是质数,只要少于他的开平方不能被整除,他就不能被整除了
- 全局的变量是不能通过delete删除的,其他的变量(局部变量,全局隐式变量)是可以通过delete删除的(清空里面的数据)
- Object();构造函数:首字母大写的
- 对象的属性都是动态添加的:对象.属性的名字=值;
- 对象的方法也是动态添加的:对象.方法名=匿名函数
- typeof是识别变量属于什么类型,instanceof是判断这个对象是不是某一个数据类型,返回是布尔类型:变量名 instanceof 数据类型
- 自定义构造函数语法:function 构造函数名字(参数){对象使用this}
- 构造函数的名字首字母要大写
- this.属性名 = 变量名;this.name = name;this.name和name不是同一个变量
- 自定义构造函数的用法:创建对象的时候使用new关键字
- 构造函数被调用的时候:开辟空间,创建新的对象;把this设置为当前创建的对象;设置对象的属性和方法的值;返回新的对象
- 访问对象的属性第二种方法:stu["name"];
- 创建对象的三种方式:new Object();自定义构造函数;字面量的方式 var 变量={属性名:值,属性名:值,属性名:值};
- 注意:字面量的方式最后一个键值对不加逗号
- 面向对象是一种变成思想,可以创建自定义的类型,很好的支持继承和多态(特征:封装、继承和多态)
- 可以用for(var 变量 in 对象名){}遍历对象,可以获取和设置对象属性的值(JSON格式的数据也可以用for-in方式遍历)
- JSON和对象创建时候不同的地方:JSON创建时属性名必须加引号。
- 基本类型的变量不能直接调用属性和方法,如果看到了基本类型的变量直接调用了属性和方法,那么就说明,这个变量已经变成了对象,内部分三步:
- 过程:创建对象并传递值;调用属性或方法;释放并把对象还原成普通的变量。
- 整个过程叫:基本包装对象 ----基本包装类型对象
- 基本包装的类型 : Number String Boolean(一般布尔类型不用,会出错)
- 如何判断这个变量是不是数组?
- instanceof
- 方法isArray 返回值是布尔类型---静态方法(数据类型.方法())
- 实例方法,实例---对象. 通过创建对象之后 对象.出来的方法
感觉总结了还不少吧,希望能对正在学习的你有所帮助,看到那么多方法,只要多多使用,放在不同的情境中,以后遇到就会想起来的了。加油加油!