【JavaScript自定义对象】
如果想要自定义对象,应该先对对象进行描述,js是基于对象,不是面向对象。
不具备描述事物的能力。若用面向对象思想编写js,就要先描述,在js中,可以
用函数来模拟面向对象中的描述。
(以下代码省略了<html>,<script>等标签,且各个代码不要放在同一个文件中)
【代码1】
//用js来描述人
function Person(){//相当于构造器
alert("person run");
}
//通过描述进行对象的建立。new
var p = new Person();//【特别注意】这里千万不要写Person p = new Person()
//以上程序运行,弹出person run
【代码2】
function Person(){
}
var p = new Person();
//【重点】动态给p对象添加属性。直接使用p.属性名即可。
p.name = "zhangsan";
p.age = 29;
//【重点】如果定义的p对象的属性赋值为一个函数,即是给p对象添加一个方法。
p.show = function(){
alert("show:" + this.name + ":" + this.age);//【特别注意】这里必须有this
}
p.show();
//以上程序运行,弹出show:zhangsan:29
【代码3】
var obj = new Object();
obj.name = "god father";
obj.age = 2012;
alert(obj.name + ":" + obj.age);//弹出god father:2012
//代码3说明在js中,只要new一个对象,都可以随便往里面添加属性信息,哪怕是上帝Object
【代码4】
function Person(name,age){
this.name = name;
this.age = age;
}
var p = new Person("wangcai",20);
alert(p.name);//弹出wangcai
【代码5】
function Person(){
this.setName = function(name){
this.name = name;
}
this.getName = function(){
return this.name;
}
}
var p = new Person();
p.setName("xiaoqiang");
alert(p.getName());//弹出xiaoqiang
//代码5演示了js自定义对象中的set和get方法,【特别注意】与Java不同,以上这些this一个都不能省
【代码6】
var pp = {
//定义一些成员
"name":"小明","age":38,
"getName":function(){
return this,name;
}
}
alert(pp.age + ":" + pp.getName());//弹出38:小明
alert(pp["age"] + ":" + pp.getName());//弹出38:小明
//以上两种取age的方式均可,【注意】第一种:对象.属性名 第二种:对象.["属性名"]
//代码1-5是先描述,再定义实体对象,代码5是直接用{}来定义一个实体,在其内可以封装键值对,格式是"键":值,键值对之间用逗号隔开
【代码7】
function Person(name,age){
this.name = name;
this.age = age;
this.setName = function(name){
this.name = name;
}
this.getAge = fucntion(){
return this.gae;
}
}
var p = new Person("xiaoqiang",22);
for(x in p){
document.write(x + ",");
}
//输出name,age,setName,getAge,发现将对象中的属性全部遍历出来
for(y in p){
document.write(y + ":" + p[y]);//【特别注意】这里写p.y或p["y"]是遍历不出来信息的
}
//遍历出对象中所有键值对信息,如setName:function(name){this.name=name;}
【用js实现map集合】
var map = {
8:"zhangsan",9:"lisi",10:"wangwu" //【特别注意】这行最后不能写任何标点符号,否则出错
}
var val1 = map[8];
document.write(val1);//输出zhangsan
【习惯】在js中定义名称时候明确其类型,如:
var iN = 5;
var bX = true;
var s = "abc";
var oMap = {
8:"zhangsan",9:"lisi",10:"wangwu"
}
这样再次看到这些变量,就知道iN是int,bX是boolean,s是string,oMap是Object(实体对象)
【注意】自定义对象Person也具备原型,即Person.prototype,那么可以通过原型在后续对自定义
对象进行功能扩展,且一旦定义了相关功能,所以Person都具备该功能。