对象
在javascript中,所有的事物都是对象,如字符串,数值,数组,函数。
在javascript语言中时通过一种叫作原型的方式来实现面向对象编程的。
回顾JavaScript数据类型
- number(数值类型)
- string(字符串类型)
- boolean(布尔类型)
- null(空类型)
- undefined(未定义类型)
- object:一种复杂的数据类型,该类型实例化的对象是一组数据和功能集合。
声明一个变量fruit后,未赋值,它的默认值是一个null值,但没有定义类型,这时fruit就是一个undefined,如果这个fruit是为了保存对象,则修改其默认的初始化的值未null,那么使用typeOf运算符检测其类型会显示未object类型。
创建对象
在javascript中,有Date,Array,String等这样的内置对象,这些内置对象的功能强大简单,非常实用,但在处理一些复杂的逻辑时就无能为力了,这是就需要开发人员自定义对象了,所以在javascrupt中,对象分为两种。
- 自定义对象。
- 内置对象
1.自定义对象
于java中创建对象一样,创建自定义对象最简单的方式就是使用操作符new创建一个object的实例,然后通过“.”为其添加属性和方法。
语法:
var 对象名称=new Object();
下面创建一个名为flower的对象,并为其添加四个属性(name,genera,area,uses)和一个方法showName(),其中方法showName()用来显示name的值。
<script>
var flower = new Object();
flower.name="长春花";
flower.genera="夹竹桃科 长春花属";
flower.area="非洲,亚热带,热带,以及中国大陆的华东,西南,中南等地";
flower.uses="观赏或用药等";
flower.showName=function(){
alert(this.name)
}
flower.showName();
</script>
this.name的值,即flower的name值
上述方式是基于Object对象的方式创建对象,在javascript中还有一种使用字面赋值的方式在定义对象的时候为其添加属性和方法,这样创建的对象,其方法和属性可以直接使用对象引用,如下代码所示:
<script>
var hua = {
name:"长春花",
genera:"夹竹桃科 长春花属",
area:"非洲,亚热带,热带以及中国大陆的华东,西南,中南等地",
uses:"观赏或用药等",
showName:function(){
alert(this.name);
}
};
hua.showName();
</script>
在浏览器中以运行,两种写法的结果是一样的。
2.内置对象
javascript的内置对象是一种特殊的数据,常见的内置对象有:
-
String(字符串)对象
-
Date(日期)对象
-
Array(数组)对象
-
Boolean(逻辑)对象
-
Math(算数)对象
-
RegExp对象
-
字符串是javascript中的一种基本的数据类型,String对象的length属性声明了该字符串中的字符数,String类定义了大量的操作字符方法,一般分为查找字符串,截取和拼接字符串,匹配正则表达式,改变字符串样式等,如已经学习的indexOf()方法,replace()方法。
-
Date对象用于处理日期和时间,Date对象会自自动把当前日期和时间保存为初始值,Date对象的大部分方法有如下几类组成 getxxx获取年月日时分秒等,setxxx设置年月日时分秒等。
-
数组对象的作用是使用单独的变量名来存储一系列的值,数组的常用属性是length代表了这个数组中元素的个数,数组的常用方法有排序,添加和删除元素等,拼接另一个数组,数组转成字符串如sort(),concat(),join()等。
-
Boolean对象用于将非逻辑值转换未逻辑值(ture或者false)在javascript中布尔值是一种基本的数据类型,Boolean对象是一个将布尔值打包的布尔对象。
-
Math对象的作用是执行常用的算数任务。Math对象并不像Date和String那样的对象,因此没有构造函数Math(),像Math.round()这样的函数只能是函数,不能作为某个对象的方法使用,Math对象中常见的方法有向上,向下取整,四舍五入取整,随机数,返回两个数中大数或小数,round(),max(),min()方法等。
-
RegExp对象对我们来说比较陌生,RegExp是正则表达式的缩写,当需要建检索某个文本是可以使用一种模式来描述要检索的内容,RegExp就是这种模式。
构造函数和原型对象
无论是基于Object创建对象还是使用字面赋值的方式创建对象,都有一个非常明显的缺点,那就是使用同一个接口需要创建很多对象,这样会产生大量的重复代码,但是构造函数的出现解决了这个问题。
构造函数
所谓的构造函数就是一个普通的函数,但是内部使用了this变量,对构造函数使用new操作符,就能生成实例,并且this变量会绑定在实例对象上,从而定义自定义对象类型的属性和方法。例如上面的示例重写:
<script>
function Hua(name,genera,area,uses){
this.name=name;
this.genera=genera;
this.area=area;
this.uses=uses;
this.