1.Javascript对象
JavaScript对象其实就是属性的集合,也就是说,给定一个JavaScript对象,我们可以明确的知道一个属性是不是这个对象的属性,
对象中的属性是无序的,并且是各不相同的(如果用同名的,则后声明的覆盖先声明的)。
一般来说,我们声明对象的时候对象往往只是一个空的集合,不包含任何的属性,通过不断的添加属性,使得该对象成为一个
有完整功能的对象,而不用通过创见一个类,然后实例化该类这种模式,这样我们的代码具有更高的灵活性,我们可以任意的增删对象的属性。
JavaScript对象的本身就是一个dictionary,或者Java语言中的Map,或者称为关联数组,即通过键来关联一个对象,这个对象本身又可以是一个对象,根据此定义,我们可以知道
JavaScript对象可以表示任意复杂的数据结构。
2.prototype
prototype是JS特有的一个概念,通过使用原型,JS可以建立其传统OO语言中的继承,从而体现对象的层次关系。
JS本身是基于原型的,每个对象都有一个prototype的属性来,这个prototype本身也是一个对象,因此它本身也恶意有自己的原型,
这样就构成了一个链结构。
访问一个属性的时候,解析器需要从下向上的遍历这个链结构,直到遇到该属性,则返回属性对应的值,或者遇到原型为null
的对象(JS的基对象Object的prototype属性即为null),如果此对象仍没有该属性,则返回undefined
下面我们看一个例子:
//声明一个对象base
function Base(name){
this.name=name;
this.getName=function(){
return this.name;
}
}
//声明一个对象child
function Child(id){
this.id=id;
this.getId=function(){
return this.id;
}
//将child的原型指向一个新的base对象
Child.prototype=new Base("base");
//实例化一个child对象
var c1=new Child("child");
//c1本身具有getId方法
print(c1.getId());
//由于c1从原型链上继承到了getName方法,因此可以访问
print(c1.getName());
得出结果:
child
base
由于遍历原型链的时候,是由下而上的,所以最先遇到的属性值最先返回,通过这种机制可以完成重载的机制。
}
3.this指针
在JS中,this表示当前上下文,即调用者的引用
//定义一个人,名字为jack
vat jack={name:"jack".
age:26
}
//定义另一个人,名字为abruzzi
var abruzzi={
name:"abruzzi",
age:26
}
//定义一个全局的函数对象
function printName(){
return this.name;
}
//设置printName的上下文为jack,此时的this为jack
print(printName.call(jack));
//设置printName的上下文为abruzzi,此时的this为abruzzi
print(printName.call(abruzzi));
4.使用对象
对象是JS的基础,
对象的声明有三种方式:
(1) 通过new 操作符作用域Object对象,构造一个新的对象,然后动态的添加属性,从无到有的构筑一个对象
(2)定义对象的"类":原型,然后使用new 操作符来批量的构筑新的对象
(3)使用JSON.
第二种方式:
//定义一个“类”, Address
function Address(street,xno){
this.street =street ||'Huang Road';
this.xno=xno || 135;
this.toString =function() {
return "street:"+this.street+",No:" +this.xno;
}
}
//定义另一个"类",Person
function Person (name,age,addr){
this.name=name ||'unknown';
this.age=age;
this.addr=addr||new Address(null,null);
this.getName=function(){return this.name;}
this.getAge=function(){return this.age;}
this.getAddr=function(){return this.addr.toString();}
}
//通过new操作符来创建两个对象,注意,这两个对象是相互独立的实体
var jack=new Person('jack',26,new Address('Qing Hai Road',123));
var abruzzi=new Person('abruzzi',26);
//查看结果
print(jack.getName());
print(jack.getAge());
print(jack.getAddr());
print(abruzzi.getName());
print(abruzzi.getAge());
print(abruzzi.getAddr());
运行结果如下:
jack
26
street:Qing Hai Road,No:123
abruzzi
26
street:Huang Quan Road,No:135
4.json及其使用
例如:
var obj={
name:"abruzzi",
age:26,
birthday:new Date(1984,4,5),
addr:{
street:"Huang Quan Road",
xno:"135"
}
}