ECMAScript闭包,ECMAScript对象

                     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>

  

原文地址:https://www.cnblogs.com/85-Q/p/9549018.html