(9)自定义对象:四种方式
js自定义对象,应该先对对象进行描述。
js是基于对象,不是面向对象,不具备描述事物的能力。
我们还想按照面向对象的思想编写。
就要先描述,在js中,可以通过函数来模拟面向对象中的描述
下面创建对象是4种方式,但是调用对象成员均有两种方法
调用属性①p[“属性名”] ②p.属性名
调用方法①p[“属性名”]()②p.方法名
而且可以在创建了对象后,任意添加方法或者属性,若用本对象属性,则用this
方法一、定义构造函数,然后通过构造函数声明对象
function Person()//相当于构造器
{
}
//通过描述进行对象的建立 new,在声明一个对象实例时,必须使用new关键字
var p=new Person();
//对象的成员(属性和函数)可以无限制的添加
//动态给p对象添加属性,直接用p.属性名即可
p.name="zhangsan";
p.age=29;
//如果定义的p对象的属性赋值为一个函数,即是给p对象添加一个方法
p.show=function()
{
alert("show:"+this.name+":"+this.age);
}
//访问对象属性两种方法:①对象名.成员名
p.show();
方法二、创建Object对象,然后用此对象创建属性或者方法
var obj=new Object();
obj.name="god father";
obj.age="66666";
alert(obj.name+":"+obj.age);
方法三、模拟Java中类,即先抽象描述事物,再创建对象
//第三种方式:描述事物,然后创建对象
/* function Person(name,age)
{
//给Person对象添加两个属性
this.name=name;
this.age=age;
//添加两个方法,注意this.在js中不能省略
this.setName= function (name)
{
this.name=name;
}
this.getName=function()
{
return this.name;
}
}
var p=new Person("旺财",20);
println(p.name);
p.setName("小强");
println(p.getName());
for(x in p)
{
println(x+":"+p[x]);//属性或者函数
}
方法四、键值对方式创建对象
var pp={
//定义一些成员
"name":"小明","age":26,
"getName":function()
{
return this.name;
}
}
//对象调用成员有两种方式:对象.属性名 对象["属性名"]
println(pp["age"]+":"+pp.name);
var Map=
{
8:"小强",3:"旺财",7:"小明"
}
function get(key)
{
return Map[key];
}
var s=get(7);
println(s);
方法四中更复杂的应用
var myMap={
name:["小a","小b","小c"],nums:[21,24,36],
names:[{name1:"zhangsan"},{myname:"hahah"}]
}
println(myMap.name[1]);//myMap.names是个数组,所以可以用索引指定输出内容
println(myMap.names[0].name1);