对象的基本概念、属性和方法
JS对象可以理解为带有属性和方法的特殊数据类型。
类:类是具有相同类型的对象的抽象。一个对象包含的所有数据和过程可以通过类来构造。
继承性:在某种情况下,一个类会有“子类”,子类比原本的类(称为父类)要更加具体化
封装性:类向外部隐藏某一方法的具体执行步骤
多态性:由继承而产生的相关的不同类,其对象对同一消息会做出不同的响应。
创建对象:
1.使用构造函数创建对象
基本结构: var objectName= new functionName(args)
objectName表示构造的实例对象
functionName表示一个构造函数
Args表示参数列表
构造函数内this指代objectName实例对象
2.使用对象直接量创建对象(推荐)
属性名与属性值之间通过冒号进行分隔。属性与属性之间通过逗号进行分隔。
对象的属性值可以是任意类型数据,函数、数组、对象、值等等
1. new操作符
var cat = new Object();
cat.name=“sunny”; //属性
cat.legs=4;
2. 对象字面量表示法(推荐)
var cat={
name:“Tom”, //属性
legs:4
}
操作对象
引用对象
创建对象后,把对象的地址赋值给变量,实现变量对对象的引用
o = { // 创建对象,并引用该对象给变量o
x:1,
y:true
}
o1 = o; // 复制变量o
alert(delete o); // 删除变量o,返回值为true,说明删除成功
alert(o1.x); // 读取对象内数据,显示为1,说明对象依然存在
alert(o.x); // 使用o读取对象内的数据,提示没有定义对象
复制对象
利用for/in语句遍历对象成员,然后注意赋值给另一个对象
function F(x,y){ // 构造函数F
this.x = x; // 本地属性x
this.y = y; // 本地属性y
this.add = function(){
// 本地方法add()return this.x + this.y;
}
}
F..mul = function(){
// 原型方法mul()return this.x * this.y;
}
var f = new F(2,3) // 实例化构造函数,并进行初始化
var o = {} // 定义一个空对象o
for(var i in f){ // 遍历构造函数的实例,把它的所有成员赋值给对象o
o[i] = f[i];
}
alert(o.x); // 返回2
alert(o.y); // 返回3
alert(o.add()); // 返回5
alert(o.mul()); // 返回6
//注意,有一个易混点,var a=function(){} 此时a即代表方法,alert的话显示a的方法体也能表明a本身就是方法,说是一个易混点是因为,这个容易与方法为变量赋值混淆,比如:var a=b();这个就是用b方法为变量a赋值,而a此时代表的是方法b的返回值,而并非是方法b本身了。
删除对象
JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。找出那些不再继续使用的变量,然后释放其占用的内存。
系统分配给浏览器的内存通常小于桌面应用程序,因此需要优化内存管理,让页面获得更好的性能。
对象删除:
var obj = new Object();obj = null; //解除引用 ,解除引用之后,js垃圾回收机制自动删除对象。操作属性
定义属性
冒号定于对象属性,左侧为属性名右侧为属性值 //注意,是冒号,不是等号。
例如: x:stringtext;
访问属性
通过.访问 x. stringtext;
赋值属性
x. stringtext=1;
删除属性
Delete x;
JavaScript中的常用内置对象
对象是一种数据结构,用于将数据(属性)和功能(方法)组织在一起。
主要分为:
基本包装类型:Boolean、Number、String
引用类型:Array、Date、RegExp、Function等 //有时间仔细研究一下。
单体内置对象:Global、Math
-------------------------------------------------------------------------------------------------------------
为了提高使用基本类型值的便捷性,提供3个基本包装类型:Boolean、Number、String,封装了各自的属性和方法
当读取一个基本类型值时,后台将自动创建一个对应的基本类型的对象
var s1 = “test";
var s2 = s1.substring(2); //基本类型值不应有方法?
实际上在后台创建了String类型的实例:
var s1 = new String(“test“); //创建实例
var s2 = s1.substring(2); //调用方法
var s1 = null; //销毁实例
-------------------------------------------------------------------------------------------------------------
Number类型
toString()方法
var num = 10;
alert(num.toString()); //"10"
alert(num.toString(2)); //“1010” 二进制数
alert(num.toString(16)); //“a” 十六进制数
toFixed()方法,按设定的小数位数返回字符串
var num = 10;
alert(num.toFixed(2)); //"10.00"
String类型
字符串长度属性 .length
字符方法 charAt(), charCodeAt()
var stringValue = “hello world”;
alert(stringValue.charAt(1)); //“e”
alert(stringValue.charCodeAt(1)); //“101”
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
//方法 charCodeAt() 与 charAt() 方法执行的操作相似,只不过前者返回的是位于指定位置的字符的编码,而后者返回的是字符子串。
字符串操作方法
concat() //拼接字符串
substring //取子字符串
字符串位置方法
var stringValue = “hello world”;
alert(stringValue. indexOf(“o”)); //4 ,,这个默认是第一个"o"的位置。
alert(stringValue.lastIndexOf(“o”)); //7 ,还是很精细的,这个返回最后一个“o”的位置
删除前后空格的方法 trim()
大小写转换方法 toLowerCase() toUpperCase()
对象--Array类型
数组,一组值的有序列表
-------------------------------------------------------------------------------------------------------------
特点:
同一数组每个单元可以保存不能类型的值,如{“blue”, 3, true, null}
动态数组,长度可以动态调整
功能强大:提供栈、队列、排序等功能
-------------------------------------------------------------------------------------------------------------
创建方法包括以下三种方式:
1)new Array();
2)new Array(size);
3)new Array(element0, element1, ..., elementn);
参数:
参数 size 是期望的数组元素个数。
参数 element ..., elementn 是参数列表。
返回值:
1)方法返回的数组为空,length 字段为 0。
2)方法返回具有指定个数、元素为 undefined 的数组。
3)方法返回具有指定个数、元素为 指定值的数组。
Array对象中包含的主要方法如下:
方法 | 描述 |
concat() | 连接两个或更多的数组,并返回结果 //这个经常用到。 |
join() | 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔 //这个很实用。 |
pop() | 删除并返回数组的最后一个元素 //栈方法 |
push() | 向数组的末尾添加一个或更多元素,并返回新的长度 //绝对最常用,注意不是add()方法,而是push |
reverse() | 颠倒数组中元素的顺序 |
shift() | 删除并返回数组的第一个元素 //队列方法 ,联系pop(); |
unshift() | 向数组的开头添加一个或更多元素,并返回新的长度 //un |
sort() | 对数组的元素进行排序 //l类似于java的一个接口 |
toString() | 把数组转换为字符串,并返回结果 //貌似没什么大用处,数组可以直接alert(),当然也会有好多其他用处 |
valueOf() | 返回数组对象的原始值 |
对象--Date类型
Date 对象用于处理日期和时间,使用自UTC(Coordinated Universal Time,国际协调时间)1970年1月1日午夜(零时)开始经过的毫秒数来保存日期。Date对象创建方法有以下几种:
var now = new Date(); //获得当前系统日期和时间
var someDate = new Date(Date.parse("May 25,2012"));
var someDate = new Date("May 25,2012"); //与上相同
var someDate = new Date(Date.UTC(2010,0)); //GMT时间2010年1月1日凌晨0时
var someDate = new Date(2010,0); //与上相同
var someDate = new Date(Date.UTC(2010,4,5,17,55,55)); //GMT时间2010年5月6日下午5:55:55,月和时以0为基数,0表示一月
var someDate = new Date(2010,4,5,17,55,55); //与上相同
Date对象常用的方法和说明如下:
方法 | 描述 |
getDate() | 从 Date 对象返回日期 (1 ~ 31) //日 |
getDay() | 从 Date 对象返回星期几(0 ~ 6) //星期几 |
getTime() | 返回 1970 年 1 月 1 日至今的毫秒数 //常用来测试程序 |
parse() | 返回1970年1月1日午夜到指定日期(字符串)的毫秒数 |
setDate() | 设置 Date 对象中月的某一天 (1 ~ 31) |
setTime() | 以毫秒设置 Date 对象 |
toString() | 把 Date 对象转换为字符串 |
toTimeString() | 把 Date 对象的时间部分转换为字符串 |
toDateString() | 把 Date 对象的日期部分转换为字符串 |
===============================================================
有一个问题应当注意:
var a=new Date().parse(); //这个是允许的,因为parse方法是Date类的静态方法,允许点点直接点调用。但是其他的非静态方法则不行。
var a=new Date().getDate();
var b=a.getTime(); //非静态方法应当如此定义(getTime是静态方法,只是举个例子)。4
===============================================================
对象--RegExp类型
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具,被用来检索、替换那些符合某个模式的文本。
语法:
new RegExp(pattern, attributes);
参数:
pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。
方括号用于查找某个范围内的字符:
表达式 | 描述 |
[abc] | 查找方括号之间的任何字符 |
[^abc] | 查找任何不在方括号之间的字符 |
[0-9] | 查找任何从 0 至 9 的数字 |
[a-z] | 查找任何从小写 a 到小写 z 的字符 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符 |
[A-z] | 查找任何从大写 A 到小写 z 的字符 |
[adgk] | 查找给定集合内的任何字符 |
[^adgk] | 查找给定集合外的任何字符 |
(red|blue|green) | 查找任何指定的选项 |
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 | 描述 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\n | 查找换行符 |
\f | 查找换页符 |
\r | 查找回车符 |
\t | 查找制表符 |
RegExp对象属性:
属性 | 描述 |
global | RegExp 对象是否具有标志 g |
ignoreCase | RegExp 对象是否具有标志 i |
lastIndex | 一个整数,标示开始下一次匹配的字符位置 |
multiline | RegExp 对象是否具有标志 m |
source | 正则表达式的源文本 |
RegExp对象方法:
方法 | 描述 |
exec | 检索字符串中指定的值。返回找到的值,并确定其位置 |
test | 检索字符串中指定的值。返回 true 或 false |
对象--Function类型lJS 中Function类型实际上是一种对象Object。每一个函数实际上都是Function类型的一个实例,每一个函数都有一些默认的属性和方法。
function sum(num1, num2)
{ return num1 + num2;}
相当于
var sum = function(num1, num2)
{ return num1 + num2;};
函数名实际上是一个指向函数对象的指针变量
function sum(num1, num2)
{ return num1 + num2;}
alert(sum(10,10)); //20
var anotherSum = sum;
alert(anotherSum(10,10)); //20
sum = null;
alert(anotherSum(10,10)); //20
函数名是指针,JS函数没有重载。
作为值的函数,可以像传递参数一样将函数传递给另一个函数
function callSomeFunction(someFunction, someArgument){
return someFunction(someArgument); }
function add10(num){ return num + 10; }
var result1 = callSomeFunction(add10, 10);
alert(result1); //20
注意不是 callSomeFunction(add10(), 10); //add10()是执行函数后的结果,这个地方很容易出错
函数内部属性
arguments,是一个数组对象,包含传入函数的所有参数,如可以通过arguments[0]取第一个参数
this,指向函数执行的环境对象
window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
sayColor(); //red
o.sayColor = sayColor; //这点要注意,Js是基于对象的,用于一个对象的方法通常对其他对象不再适用,但是可以在想应用的对象上在定义一个函数使其等于目标函数。
o.sayColor(); //blue
内置对象:ECMAScript实现提供的、不依赖于宿主环境的对象,在ECMAScript程序执行之前就已经存在。
Global对象:所有在全局作用域中定义的属性和函数,都属于Global对象,比如isNaN()、parseInt()、parseFloat()、encodeURI()、eval()方法。
Math对象:用于执行数学任务
属性:Math.PI、SQRT2(2 的平方根)等
方法:abs(x)、sin(x)、max(x, y)、round(x)、ceil(x)等。
浏览器对象
BOM浏览器对象模型(Browser Object Model)
主要用于管理浏览器窗口,提供独立于内容而与浏览器窗口进行交互的对象。这些功能与任何网页内容无关。
可以对浏览器窗口进行访问和操作,如可以弹出新的窗口,改变状态栏中的文本等
============================================================
Window:客户端JS中的顶层对象。每当body或frameset标签出现时,window对象就会被自动创建。
Navigator:包含客户端有关浏览器的信息。
Screen:包含客户端显示屏的信息。
History:包含浏览器窗口访问过的URL信息。
Location:包含当前网页文档的URL信息。
Document:包含整个HTML文档,可被用来访问文档内容,及其所有页面元素。
============================================================
window对象
Window对象时BOM的核心,代表浏览器窗口的一个实例。在浏览器中,window对象既是JavaScript访问浏览器窗口的接口,也是JavaScript的全局对象,因此在全局作用域中声明的所有变量和函数也是window对象的属性和方法
表示整个浏览器窗口,不包含内容
frames集合--可以用window.frames[0]或者window[“frameName”]来引用框架
框架中包含框架,父框架parent对象,self对象
window对象
窗口操作:调整浏览器窗口的大小和位置
window.resizeTo(150,300);打开新窗口
window.open(“http://www.163.com”,”topFrame”,”属性字符串height=300,width=300,resizable=yes”);弹出系统对话框 alert() 、confirm()等
历史history
window.history.go(-1); //后退一页 window.history.go(1); //前进一页 history.length //历史页面数document对象
浏览器当前文档对象,既属于BOM也属于DOM (Document Object Model,文档对象模型)
属性
bgColor //背景颜色 fgColor //文本颜色 linkColor //链接的颜色 title //<title/>中的文本 URL //当前页面的url集合
anchors //<a href=“……” > images //页面中所有图片的集合 forms //所有表单的集合 links //所有外部文件连接的集合可以使用document.images[0] 或者 document.images[“imagename”]访问图片
在调用的位置写入字符串
write(“This is a test”); writeln(“This is a test”); //末尾加上换行符\nopen()打开文档进行编写
close()关闭open()打开的文档,让浏览器显示页面
必须在完全载入页面前调用write()。如果在页面载入后调用,将抹去页面的内容,显示指定的内容。
location对象
地址对象,就是将URL封装成了一个对象
属性
host //返回服务器的名字,如www.qq.com href //当前浏览器的完整url pathname //url主机名后的部分,如www.qq.com/news/index.aspx 将放回/news/index.aspx port //端口 protocol //url中使用的协议,http://或者ftp:// search //将返回?后(包括?)的内容lnavigator对象
浏览器信息对象,提供浏览器的信息
大多数浏览器支持的属性
appName //官方浏览器名 appVersion //浏览器版本 platform //运行浏览器的平台screen对象
height / width屏幕的高度和宽度,像素
colorDepth,调色板的颜色深度