JavaScript高级程序设计学习笔记
1.对JavaScript实现各个组成部分的详尽解读
2.对JavaScript面向对象编程的全方位阐述
3.DOM,BOM及浏览器事件模型的透彻剖析
4.Web应用基本数据格式JSON,XML及存取
5.Ajax,Comet服务器端通信和基于File API的拖放式文件上传
6.ECMAScript 5定义的最核心语言特性
7.HTML 5涵盖的表单,媒体,Canvas(包括WebGL)
8.Selectors、Web Workers、地理定位及跨文档传递消息等最新API
9.离线应用及客户端存储(包括IndexedDB)
10.维护、性能、部署相关的最佳开发实践
11.新兴API及ECMAScript Harmony展望
对JavaScript面向对象编程的全方位阐述
理解对象
var book={
_year:2004;
edition:1;
};
Object.defineProperty(book,"year",{
get:function () {
return this._year;
},
set:function (newValue) {
if (newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
});
book.year=2005;
alert(book.edition);
Object.defineProperties();//2
_year前面的下划线是一种常用记号,用于表示只能通过对象方法访问的属性。
创建对象
由于使用Object构造函数或对象字面量可以创建单个对象,但是这些方式存在明显缺点:会产生大量重复代码。
1.工厂模式
function createPerson(name,age,job) {
var o=new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayName=function () {
alert(this.name);
};
return o;
}
var person1=createPerson("ann",12,"asdf");
var person2=createPerson("jean",15,"erty");
person1.sayName();
person2.sayName();
2.构造函数模式
function Person(name,age,job) {
this.name=name;
this.age=age;
this.job=job;
this.sayName=function () {
alert(this.name);
};
}
var person1=new Person("ann",12,"asdf");
var person2=new Person("jean",15,"erty");
person1.sayName();//ann
person2.sayName();//jean
与工厂模式的不同
- 没有显式的创建数据
- 直接将属性和方法赋值给this对象
- 没有return语句
可以利用instanceof(可靠)和constructor来测试对象类型。
alert(person1.constructor==Person);//true
alert(person1 instanceof Person);//true
alert(person1 instanceof Object);//true
构造函数和普通函数的区别
构造函数的缺点
由于ECMAJavaScript中的函数是对象,因此定义一个函数也就是实例化一个对象,所以每个方法都要在每个实例上重新创建。