ECMAScript闭包
ECMAScript 最易让人误解的一点是,它支持闭包(closure)。
闭包,指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使用函数之外定义的变量。
1、简单的闭包实例
在 ECMAScript 中使用全局变量是一个简单的闭包实例。
解释程序知道在调用该函数时要检查 sMessage 的值。sMessage 将在函数调用 sayHelloWorld() 时(最后一行)被赋值,显示消息。
2、复杂的闭包实例
在一个函数中定义另一个会使闭包变得更加复杂。
内部函数是一个闭包,因为它将获取外部函数的参数 iNum1 和 iNum2 以及全局变量 iBaseNum 的值。 addNum() 的最后一步调用了 doAdd(),把两个参数和全局变量相加,并返回它们的和。
函数根本不接受参数,它使用的值是从执行环境中获取的。
闭包是 ECMAScript 中非常强大多用的一部分,可用于执行复杂的计算。
ECMAScript闭包
1、通过对象字面量的形式创建对象
Javascript关键字必须放到引号之间
2、通过new Object()创建对象
var obj3=new Object();//创建一个空对象,{}
var arr=new Array();//空数组,[]
var date=new Date();//日期时间对象
var reg=new RegExp('js');//创建正则对象
3、通过Object.create()创建对象
var obj6=Object.create({x:1});
var obj7=Object.create(null);
4、通过构造函数的形式创建对象
function Test(){
}
var obj4=new Test();
function Test1(num1,num2){
this.n1=num1;
this.n2=num2;
}
var obj5=new Test1(5,6);
alert(typeof obj5);
alert(obj5 instanceof Test1);
查询属性,对象属性名/对象["属性名"]
如果属性不确定需要使用[]
添加属性
修改指定属性
通过delete删除指定属性
通过for/in遍历属性
对象中有方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <script type="text/javascript"> var person={ username:'king', age:12, salary:1234.56, addr:'北京', sex:'男', }; //查询属性,对象.属性名/对象["属性名"] //console.log('用户名为:'+person.username+" "+'性别:'+person.sex); //console.log('薪水:'+person['salary']+' '+'地址:'+person["addr"]); //如果属性不确定需要使用[] var key='username'; //console.log(person.key); //console.log(person[key]); //console.log(person['key']); function PersonInfo(name,age,sex){ this.name=name; this.age=age; this.sex=sex; } var person1=new PersonInfo('king',34,'男'); //console.log(person1.name+person['sex']); //添加属性 var obj={};//空对象 obj.username='king'; obj.age=12; obj.addr='北京'; obj['test']='this is a test'; //console.log(obj.username+' '+obj.age+' '+obj.addr+' '+obj['test']); //修改指定属性 obj.username='queen'; obj['test']='ymt'; //console.log('修改之后的名字'+obj.username); //console.log(obj['test']); //通过delete删除指定属性 delete obj['test']; //console.log(obj['test']); delete obj.username; //console.log(obj['username']); //通过for/in遍历属性 var obj1={ x:1, y:2, test:'this is a test', edu:'ymt' }; for(var p in obj1){ //console.log(p+' '); } //对象中有方法 var obj2={ username:'king', age:12, addr:'北京', sayHi:function (){ return 'say Hi'; }, info:function(){ return '用户名:'+this.username+' '+'龄:'+this.age+' 地址:'+this.addr; } }; //console.log(obj2.sayHi()); //console.log(obj2.info()); //console.log(obj2.info); function Person(username,age,sex,addr){ this.username=username; this.age=age; this.sex=sex; this.addr=addr; this.info=function(){ return this.username+this.addr; } } var p1=new Person('queen',34,'女','上海'); //console.log(p1.info()); p1.test='this is a test'; //console.log(p1.test); p1.info1=function(){ return 'this is a test1111'; }; console.log(p1.info1()); </script> </body> </html>