JavaScript中没有类的概念,可以随意定义对象而不需要类。
JSON是JavaScript中对象的字面量,是对象的表示方法,通过JSON,可以减少中间变量,使代码结构更加清晰、直观。
JavaScript对象其实就是属性的集合,对象中的属性是无序的。
JavaScript对象就类似于Java语言中的Map,属性是由键值对组成。
JavaScript引擎在初始化时会构建一个全局对象,这个对象就是window。
原型(prototye),是JavaScript特有的一种概念,通过使用原型,JavaScript可以实现传统OO语言的继承,从而体现对象的层次关系。JavaScript本身是基于原型的,每个对象都
有一个prototype的属性,而prototype本身也是一个对象, 因此它本身也可以有自己的原型,这样就构成了一个链结构。
访问一个属性的时候,解析器需要从下向上的遍历这个链结构,直到遇到该属性,则返回属性对应的值,或者遇到原型为null的对象(JavaScript的基对象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;
}
}
<strong>//对象通过prototype实现继承
Child.prototype=new Base("base");</strong>
//实例化一个Child对象
var c1=new Child("child");
//c1本身具有getId方法
alert(c1.getId());
//由于c1从原型链上“继承”到了getName方法,因此可以访问
alert(c1.getName());
this指针,在其他OO语言中表示对象本身,而在JavaScript中表示当前上下文,即调用者的引用,如下例:
//定义一个人,名字叫jake
var jake={
name:"jake",
age:26
};
//定义另外一个人,名字叫Java
var Java={
name:"Java",
age:100
};
//定义一个全局的函数对象
function printName()
{
return this.name;
}
//设置printName的上下文为jake,此时的this为jake
alert(printName.call(jake));
//设置printName的上下文为Jave,此时的this为Jave
alert(printName.call(Java));
this的值并非在函数定义时确定,而是在函数被调用时确定。
声明对象的三种方式:
1、通过new操作符作用于Object对象,构造一个新对象,然后动态的添加属性,从无到有构建一个对象;
2、定义对象的“类”原型,然后使用new操作符来批量的构建新的对象;
3、使用JSON;
JSON全称为JavaScript对象表示法(JavaScript Object Notation),即通过字面量来表示一个对象。