1. 闭包
1)什么是闭包?在一个函数内部又定义了一个函数,内部函数能访问外部函数作用域范围内的变量时
这个内部函数就叫做闭包
无论这个内部函数在哪里被调用都能访问到外部函数作用域中的那些变量
闭包可以扩大变量的作用域
2)闭包是怎么实现的?
闭包是通过作用域链由内向外 层层搜索的
3)闭包能做什么?
JS中的面向对象都是通过“闭包”来模拟的
function Person(name, age, gender) {
return {
get_name: function () {
return name;
},
set_name: function (value) {
name = value;
},
get_age: function () {
return age;
},
get_gender: function () {
return gender;
}
};
}
2. 面向对象基础
函数就是对象,对象就是函数(当函数作为对象时,每个单词首字母都大写)方法直接调用 为函数,用new调用 为对象
JavaScript中没有类的语法,是用函数闭包(closure)模拟出来的
JavaScript中声明类(类不是类,是对象)
方法1:
function Person() { //写了一个Person对象
}
var per = new Person();
per.name = 'zhangsan'; //要什么加什么,是动态语言
per.age = 90;
per.sayHi = function () {
alert('my name is ' + per.name);
};
alert(per.name);
alert(per.age);
per.sayHi();
方法2:
function Person(name,age) { //也可以看做是构造函数
this.name = name; //JavaScript同样支持this关键字,也可以动态添加
this.age = age;
}
var per = new Person("zhangsan", 38);
alert(per.name);
alert(per.age);
方法3:
function Person(name,age) {
this.name = name;
this.age = age;
}
var per = new Person("zhangsan", 38);
alert(per[’name']);
alert(per['age']);
3. 字符串的基本方法
lengthcharAt(index)
indexOf('字符串',startIndex) 没查到 返回-1
split('分隔符’,limit) 返回一个数组,limit表示要返回的数组的最大长度
substr(startIndex,len) 截取len个字符
substring(startIndex,stopIndex) 不包括stopIndex所在的字符
toUpperCase() toLowerCase()
跑马灯的实现 -->
setInterval(function () {
var txt = document.title;
document.title = txt.substr(1) + txt.charAt(0);
}, 300);
4. Array对象
JavaScript中的Array对象就是数组首先是一个动态数组,而且是一个像c#中的数组、ArrayList、Hashtable等的超强综合体
遍历输出
方式1:
for (var i = 0; i < arr.length; i++) {
alert(arr[i]);
}
方式2:(在JavaScript里没有foreach 有forin)
for (var key in arr) {
alert(key); //此时的key代表的是索引
alert(arr[key]);
}
var arr1 = ['zhangsan',89,false]; -- 数组
var arr2 = {} -- 键值对一般使用大括号来标识
5. JavaScript中的Dictionary
定义方式1:var pinyins = new Array();
pinyins["人"] = "ren";
pinyins["口"] = "kou";
pinyins["手"] = "shou";
定义方式2:
var arr = {"人":"ren","口":"kou"}; --Json格式
Json格式可以当做一个对象
arr.人 arr.口
var arr = [{"name":"steve","age":18},{"name":"tom","age":20}];
一个数组 两个元素 元素是键值对
在Ajax中使用JSON格式传输数据非常方便
要用forin输出键值对集合
6. 原型--prototype
通过类对象的prototype设置扩展方法,下面为String对象增加isEmail()方法(.出来)var email = 'yhb@itcast.cn';
String.prototype.isEmail = function () {
return this.indexOf('@') > -1 ? true : false;
};
alert(email.isEmail());