五、深度解析JavaScript对象
1、Javascript对象模型及Fuction对象
1)在Javascript中,函数(fuction)就是对象
2)在Javascript中,没有方法(函数)重载的概念
3)在JavaScript中有一个Function对象,所有自定义的函数都是Function对象类型的。Function对象接收的所有参数都是字符串类型的,其中最后一个参数就是要执行的函数体,而前面的参数则是函数真正需要接收的参数。
4)在JavaScript中,每个函数都有一个隐含的对象arguments,表示给函数实际传递的参数。
5)
fuction add(number)
{
alert(number+20)
}
等价于
var add = fuction(number)
{
alert(number+20)
}
var add = new Fuction("number","alert(number+10)")
等价于
fuction add(number)
{
alert(number+20)
}
add(10)
2、Javascript之属性与方法
1)在JavaScript中,对于函数中定义的变量来说,加var表示局部变量,不加var表示全局变量。在JavaScript,所有对象都是从Object对象继承过来的。Object中的属性是不可枚举的(propertyIsEnumerable返回false),因此无法通过for…in语句得到其中的属性。
2)在JavaScript中,属性的定义,可以动态添加对象的属性,也可以动态删除对象的属性。
在JavaScript中定义属性的第二种方式:
3)JavaScript中方法的定义,通过函数方式获得,也可以写个函数获取
4、JavaScript中定义对象的几种方式(JavaScript中没有类的概念,只有对象)
1)基于已有对象扩充其属性和方法:坏处是每一次对象都要重新创建
2)工厂方式:需要是利用工厂创建
3)构造函数方式:通过类似java构造函数声明对象属性和方法
4)原型(“prototype”)方式:如果使用原型方式对象,那么生成的所有对象会共享原型中的属性,这样一个对象改变了该属性也会反应到其他对象当中。
单纯使用原型方式定义对象无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。
使用原型+构造函数方式来定义对象,对象之间的属性互不干扰,各个对象间共享同一个方法,在构造函数中声明对象属性,在原型中声明对象的方法
5)动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。
5、JavaScript中的继承
1)对象冒充
2)call方法方式。
3)apply方法方式
4)原型链方式(无法给构造函数传参数)
5)混合方式(推荐)
六、JavaScript调试
1. Firebug的调试。
断点的设置、调试
firebug的控制台输出
console.log(message);
console.info(message);
console.warn(message);
console.error(message);
console.debug(message);
2. JavaScript单元测试(jsUnit):http://www.jsunit.net/
3. JavaScript编码规范:通常在JavaScript不希望外界访问的成员和方法名以下划线开始。
4. jsUnit测试函数的要遵循的规则与JUnit 3.8类似(比如说测试函数名以test开头等)
5. 对于JsUnit来说,其setUp(@BeforeClass)和tearDown方法与JUnit的运行原理是不同的,JsUnit中的setUp和tearDown之间是没有关系的,也就是说不同的测试方法运行在不同的测试对象之中,而JsUnit的各个测试函数是运行在同一个测试页面中。因此setUp和tearDown会针对同一个变量进行操作。