博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象、构造函数和复杂数据类型详解
阅读量:5821 次
发布时间:2019-06-18

本文共 3933 字,大约阅读时间需要 13 分钟。

hot3.png

我们经常会听到说编程一定要有面向对象的思想,那么什么是面向对象呢?赶紧来认识一下吧。

面向对象

面向对象和基于对象

  • 面向对象
    • 可以创建自定义的类型、很好的支持继承和多态。
    • 面向对象的语言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 返回值是布尔类型---静态方法(数据类型.方法())
  • 实例方法,实例---对象. 通过创建对象之后 对象.出来的方法

感觉总结了还不少吧,希望能对正在学习的你有所帮助,看到那么多方法,只要多多使用,放在不同的情境中,以后遇到就会想起来的了。加油加油!

转载于:https://my.oschina.net/yxmBetter/blog/829451

你可能感兴趣的文章
BZOJ1997:[HNOI2010]PLANAR——题解
查看>>
BZOJ1014:[JSOI2008]火星人prefix——题解
查看>>
使用Unity3D引擎开发赛车游戏
查看>>
HTML5新手入门指南
查看>>
opennebula 开发记录
查看>>
ubuntu 修改hostname
查看>>
sql 内联,左联,右联,全联
查看>>
C++关于字符串的处理
查看>>
6、Web Service-拦截器
查看>>
Flask 源码流程,上下文管理
查看>>
stream classdesc serialVersionUID = -7218828885279815404, local class serialVersionUID = 1.
查看>>
ZAB与Paxos算法的联系与区别
查看>>
java 读取本地的json文件
查看>>
Breaking parallel loops in .NET C# using the Stop method z
查看>>
Android Content Provider Guides
查看>>
修改故障转移群集心跳时间
查看>>
[轉]redis;mongodb;memcache三者的性能比較
查看>>
微软职位内部推荐-Sr DEV
查看>>
用计算器计算“异或CRC”
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>