js面向对象2
1、发展史
面向机器
面向过程:将程序的执行分解成若干个步骤
面向对象:将程序的执行分解成若干个事物
2、面向对象两个基本概念
类:代表某类事物,是抽象的
对象:代表某个事物,是具体的
3、快速入门
表达一个人的完整信息

1 <script>
2
3 //面向过程
4 var name = 'zhangsan';
5 var age = 30;
6 var marry = true;
7 alert(name + age + marry);
8
9 //面向对象
10 function Person{
11 }
12 var p1 = new Person();
13 p1.name = 'lisi';
14 p1.age = 20;
15 p1.marry = true;
16 alert(p1.name + p1.age + p1.marry);
17
18 </script>

在面向过程的例子中,我们分别使用了三个变量来定义一个人的完整信息,但这三个变量它们之间没有必然的联系,如:我现在找到变量age,虽然可以取到数据,但并不清楚这是“谁”的年龄。
在面向对象的例子中, function Person{}是构造器。我们可以这样理解,每一个定义的function Person{}都是Person类的构造函数。
4.JS中常见的系统类
1)String类 字符串类
length :取得字符串长度
indexOf(string) :取得参数在字符串中出现的位置
substr(num1,[num2]) :截取字符串
toLowerCase() :转换为小写
toUpperCase() :转换为大写
replace(str1,str2) :字符串替换
2)Date类 日期类
getYear() :返回年份(有时会出错,建议用第二种)
getFullYear() :返回年份
getMonth() :返回月份 (0---11)
getDate() :返回每月第几天
getDay() :返回星期数 (0-6)
getHours() :返回小时数
getMinutes() :返回分钟数
getSeconds() :返回秒数
getMilliseconds() :返回毫秒数
3)Math类 数学类
ceil(数值) :返回大于或等于该数的最小整数(比如说分页 Math.ceil(4.8)=5)
floor(数值) :返回小于或等于该数的最大整数
min(数值1,数值2) :返回最小数
max(数值1,数值2) :返回最大数
pow(数值1,数值2) :返回数值1的数值2次方
random() :返回随机数 0----------1
round(数值) :四舍五入
sqrt(数值) :开平方根
Math类下的方法都是静态方法
5.自定义类--类的定义
语法:
function 类名(){
}
在js中,没有类的定义语句,只有function,每一个function,我们可以认为它是同名类的构造函数
比如说:
function person(){
}
它是Person类的构造函数
这种函数也叫构造器
6.自定义类--声明对象
语法: var 对象=new 类名();
关键字new:实例化对象, 开辟相应内存空间
1 function Person(){
2 alert('hello');
3 }
4 var p1 = new Person();
执行上面这个例子时,我们发现,在实例化时,直接执行了Person构造函数
7.自定义类--关于对象属性的使用
语法:
对象.属性;
对象['属性'];

1 function Person(){
2 alert('hello');
3 }
4 var p1 = new Person();
5 p1.name='zhangsan';
6 p1.age=30;
7 alert(p1.name+p1.age);

在js中,对象属性是动态添加的,对象属性可以使用“.”或['']这两种形式表示出来
对象的属性可以是任何数据类型,如:字符串、数字、对象
8.三个关键字
constructor: 返回的是对象的构造器
typeof :返回数据类型
instanceof :判断对象是否是某个类的实例

1 function Person(){
2 alert('hello');
3 }
4 var p1 = new Person();
5 p1.name='zhangsan';
6 p1.age=30;
7 alert(p1.name+p1.age);
8
9 //返回p1对象的构造器
10 alert(p1.constructor);
11 //取得p1变量的数据类型
12 alert(typeof p1);
13 //判断p1是不是Person类的一个实例
14 alert(p1 instanceof Person);

9.对象在内存中的表现形式

1 //例1
2 function Person(){
3 }
4 var p1 = new Person();
5 p1.name='zhangsan';
6 p1.age=30;
7
8 var p2 = new Person();
9 alert(p2.name);

在例1中,创建p1对象时,会为p1开辟相应的堆空间,然后将name和age属性以及值添加到p1所指向的堆空间中,创建p2对象时,也会为p2对象开辟对应的空间,但p2所指向的堆空间是空的,所以P2对象没有name和age属性。

1 //例2
2 function Person(){
3 }
4 var p1 = new Person();
5 p1.name = 'zhangsan';
6 p1.age = 30;
7
8 var p2 = p1;
9 alert(p2.name);
10 p2.name = 'lisi';
11 alert(p2.name);
12 alert(p1.name);

在例2中,将p1栈中保存的堆的地址赋值给了p2,所以说,p2也指向了p1指向的堆内存的地址。两个对象指向了同一块堆内存,所以改变一个对象的属性,会影响到另一个对象。

1 //例3
2 function Person(){
3 }
4 var p1 = new Person();
5 p1.name = 'zhangsan';
6 p1.age = 30;
7
8 var p2 = p1;
9 alert(p2.name);
10 p2 = null;
11 alert(p1.name);
12 alert(p2.name);

在例3中,P2=null; 表示释放p2所占的栈空间,但p1的空间仍保留,p1仍然指向相应的堆空间,所以删除p2不会影响到p1对象。
js面向对象2的更多相关文章
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- js面向对象的实现(example 二)
//这个方法和上篇文章(js面向对象的实现(example 一))中的方法类似,但是更为简洁 //通过函数赋值的方式来构造对象 //同样通过闭包的方式来封装对象及内部变量 (function () { ...
- 浅谈JS面向对象之创建对象
hello,everybody,今天要探讨的问题是JS面向对象,其实面向对象呢呢,一般是在大型项目上会采用,不过了解它对我们理解JS语言有很大的意义. 首先什么是面向对象编程(oop),就是用对象的思 ...
- js面向对象,有利于复用
需求:在网页上添加个天气预报. 以前总是在需要执行js的地方,直接写function(){}.在需要同样功能的地方直接copy,或者稍微修改. 然后在网上看看有没有好点的方法,然后就看到js面向对象编 ...
- JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) { return i1 + i2;//如果不写return返回 ...
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
随机推荐
- 201621123012 《java程序设计》第3周学习总结
1. 本章学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:关键词:继承 多态 抽象类 abstract 覆盖 object siper 1.2 尝试使用思维导图将这些关键词组织起来. ...
- 已经上架的app在AppStore上搜不到的解决办法
1.问题呈现 相信很多人都遇到过这个问题,天天刷iTunes connect,终于发现app已经上架了,兴奋的跑过去告诉老板,老板说好,大家都装一个吧! 这时候只能一边不慌不忙地甩锅给苹果,一边快马加 ...
- C# 小球100米自由落下
//一球从N 米高自由落下,每次落地后反跳回原高度的一般:再录下,求它在第十次落地时,共经过多少米?第10次反弹多高 static string ballDsitance(float height1, ...
- 【bzoj4817】树点涂色 LCT+线段树+dfs序
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...
- Python之路番外:PYTHON基本数据类型和小知识点
Python之路番外:PYTHON基本数据类型和小知识点 一.基础小知识点 1.如果一行代码过长,可以用续行符 \换行书写 例子 if (signal == "red") and ...
- Hibernate学习笔记(四)—— 表与表的关系
一.一对多|多对一 1.1 关系表达 1.1.1 表中的表达 建表原则:在多的一方创建外键指向一的一方的主键. 1.1.2 实体中的表达 [客户实体] public class Customer { ...
- D. Magic Gems(矩阵快速幂 || 无敌杜教)
https://codeforces.com/contest/1117/problem/D 题解:有一些魔法宝石,魔法宝石可以分成m个普通宝石,每个宝石(包括魔法宝石)占用1个空间,让你求占用n个空间 ...
- Codeforces - 914F bitset 维护字符串匹配个数
题意:给你一个串,支持两种操作,1修改某个点的字符,2询问[l,r]内模式串P与原串的匹配个数 bitset的写法是真的6啊,简直是优雅暴力的典范 bs[i]表示\(T_i\)与\(P\)匹配与否, ...
- [转] Java8 日期/时间(Date Time)API指南
[From] http://www.importnew.com/14140.html Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间 ...
- javascript的Astar版 寻路算法
去年做一个模仿保卫萝卜的塔防游戏的时候,自己写的,游戏框架用的是coco2d-html5 实现原理可以参考 http://www.cnblogs.com/technology/archive/2011 ...