JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接:
JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链
JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
1、发展史
面向机器
面向过程:将程序的执行分解成若干个步骤
面向对象:将程序的执行分解成若干个事物
2、面向对象两个基本概念
类:代表某类事物,是抽象的
对象:代表某个事物,是具体的
3、快速入门
表达一个人的完整信息
<script>
//面向过程
var name = 'zhangsan';
var age = 30;
var marry = true;
alert(name + age + marry);
//面向对象
function Person{
}
var p1 = new Person();
p1.name = 'lisi';
p1.age = 20;
p1.marry = true;
alert(p1.name + p1.age + p1.marry);
</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:实例化对象, 开辟相应内存空间
function Person(){
alert('hello');
}
var p1 = new Person();
执行上面这个例子时,我们发现,在实例化时,直接执行了Person构造函数
7.自定义类--关于对象属性的使用
语法:
对象.属性;
对象['属性'];
function Person(){
alert('hello');
}
var p1 = new Person();
p1.name='zhangsan';
p1.age=30;
alert(p1.name+p1.age);
在js中,对象属性是动态添加的,对象属性可以使用“.”或['']这两种形式表示出来
对象的属性可以是任何数据类型,如:字符串、数字、对象
8.三个关键字
constructor: 返回的是对象的构造器
typeof :返回数据类型
instanceof :判断对象是否是某个类的实例
function Person(){
alert('hello');
}
var p1 = new Person();
p1.name='zhangsan';
p1.age=30;
alert(p1.name+p1.age);
//返回p1对象的构造器
alert(p1.constructor);
//取得p1变量的数据类型
alert(typeof p1);
//判断p1是不是Person类的一个实例
alert(p1 instanceof Person);
9.对象在内存中的表现形式
//例1
function Person(){
}
var p1 = new Person();
p1.name='zhangsan';
p1.age=30; var p2 = new Person();
alert(p2.name);
在例1中,创建p1对象时,会为p1开辟相应的堆空间,然后将name和age属性以及值添加到p1所指向的堆空间中,创建p2对象时,也会为p2对象开辟对应的空间,但p2所指向的堆空间是空的,所以P2对象没有name和age属性。
//例2
function Person(){
}
var p1 = new Person();
p1.name = 'zhangsan';
p1.age = 30; var p2 = p1;
alert(p2.name);
p2.name = 'lisi';
alert(p2.name);
alert(p1.name);
在例2中,将p1栈中保存的堆的地址赋值给了p2,所以说,p2也指向了p1指向的堆内存的地址。两个对象指向了同一块堆内存,所以改变一个对象的属性,会影响到另一个对象。
//例3
function Person(){
}
var p1 = new Person();
p1.name = 'zhangsan';
p1.age = 30; var p2 = p1;
alert(p2.name);
p2 = null;
alert(p1.name);
alert(p2.name);
在例3中,P2=null; 表示释放p2所占的栈空间,但p1的空间仍保留,p1仍然指向相应的堆空间,所以删除p2不会影响到p1对象。
JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式的更多相关文章
- python面向对象反射-框架原理-动态导入-元类-自定义类-单例模式-项目的生命周期-05
反射 reflect 反射(reflect)其实是反省,自省的意思 反省:指的是一个对象应该具备可以检测.修改.增加自身属性的能力 反射:通过字符串获取对象或者类的属性,进行操作 设计框架时需要通过反 ...
- PHP面向对象(PHP对象在内存中的分配)
对 像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻 辑上 说大体上是分为4 段,栈空间段. ...
- 剖析c++(三) 类对象在内存中的布局
基本规则: 1.各data member的自然边界为其字节大小(char为1,short为2,int为4),并按照各自的自然边界对齐: 2.整个object的总自然边界为最大data memeber的 ...
- JS获取对象在内存中计算后的样式
通过obj.style的方式只能取得"内联style"的值,对于<style></style>中的css属性值,则无能为力 . 我们可以用obj.curre ...
- 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面向对象2
1.发展史 面向机器 面向过程:将程序的执行分解成若干个步骤 面向对象:将程序的执行分解成若干个事物 2.面向对象两个基本概念 类:代表某类事物,是抽象的 对象:代表某个事物,是具体的 3.快速入门 ...
- [js高手之路]从零开始打造一个javascript开源框架gdom与插件开发免费视频教程连载中
百度网盘下载地址:https://pan.baidu.com/s/1kULNXOF 优酷土豆观看地址:http://v.youku.com/v_show/id_XMzAwNTY2MTE0MA==.ht ...
- python笔记-9(subprocess模块、面向对象、socket入门)
一.subprocess 模块 1.了解os.system()与os.popen的区别及不足 1.1 os.system()可以执行系统指令,将结果直接输出到屏幕,同时可以将指令是否执行成功的状态赋值 ...
随机推荐
- Unable to convert MySQL date/time value to System.DateTime 错误
C#读取MySql时,如果存在字段类型为date/datetime时的可能会出现以下问题“Unable to convert MySQL date/time value to System.DateT ...
- 同一台电脑上多个myeclipse破解的问题
因为项目版本的问题,电脑上不得装了个myeclipe10版本的,但是破解之后,原来电脑上的myeclipse2014却显 示没有激活,好吧,我又去把myeclipse2014重新激活了一遍,但是到了m ...
- 【原】iOS学习之Xcode8关于控制台不打印错误信息
前几天将我的Xcode升到了8,但是在运行程序时,会打印很多没有用的信息,如下图: Xcode8运行程序时打印的乱码 于是各种寻求答案,找到如下答案: Edit Scheme-> Run -&g ...
- 我的前端故事----疯狂倒计时(requestAnimationFrame)
很久没有更新博客了...为了双十一准备了不少活动,终于结束了,有时间静静的坐下来总结一下了,在活动中最常用的就是倒计时了,晚上也有很多倒计时的例子了,那么今天带来的是一个新的方法和思路. 既然要介绍新 ...
- linux下的tcp连接超时
最近需要写一个linux下的通信程序, 通信模块用的是Qt的QTcpSocket. 最后程序需要增加一个断网检测, 在windows下调试没问题, 拔网线, 断网口都能马上检测到, 但到了部署到lin ...
- JavaScript-String基础知识
1.字符串可以0个或多个字符串放在一起: " ' ' ".'""' . "\"\"" 2.写法 ...
- Golang之chan/goroutine(转)
原文地址:http://tchen.me/posts/2014-01-27-golang-chatroom.html?utm_source=tuicool&utm_medium=referra ...
- Torch7学习笔记(一)CmdLine
该类主要为了提供一种方便解析参数的框架,对于每个实验尤其是神经网络中要调参数上.同时还可以把输出重定向到log文件中. 一般用法: cmd = torch.CmdLine() cmd:text() c ...
- 《HTTP权威指南》大块儿头
看到这样的一本书,胡乱翻开看看里面的内容,我觉得我又浮躁了.真厚啊!能学多少就学多少吧. 看看提要,这本书主要想讲的是HTTP和相关Web技术的.关于这方面的内容,知道的不多.
- python将图片转换为Framebuffer裸数据格式(终端显示图片)
要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可. 但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显 ...