通过闭包(Closure)和Object实现 命名空间

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> NameSpace.Hello6 </title>
  <meta charset="UTF-8">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
<script type="text/javascript">
//
//通过闭包(Closure)和Object实现
//
//Function的简洁写法
//
//这是一种比较简洁的实现,结构紧凑,通过function实例,且调用时无需实例化(new),方案来自stackoverflow:
//
var NameSpace = window.NameSpace || {};
NameSpace.Hello = new function() {
  var self = this;
  var name = 'world';
  self.sayHello = function(_name) {
    return 'Hello ' + (_name || name);
  };
};

alert(NameSpace.Hello.sayHello());
alert(NameSpace.Hello.sayHello('Jim'));
</script>
 </body>
</html>
//////////////////////////////////////////
//new function(){} -> {}

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> NameSpace.Hello6_2 </title>
<meta charset="UTF-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>


<body>
<script type="text/javascript">
//
//通过闭包(Closure)和Object实现
//
//Function的简洁写法
//
//这是一种比较简洁的实现,结构紧凑,通过function实例,且调用时无需实例化(new),方案来自stackoverflow:
//
var NameSpace = window.NameSpace || {};
NameSpace.Hello = {
self:this,
name:'world',
sayHello : function(_name) {
return 'Hello ' + (_name || this.name);
},
};


alert(NameSpace.Hello.sayHello());
alert(NameSpace.Hello.sayHello('Jim'));
</script>
</body>
</html>

 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> NameSpace.Hello3 </title>
  <meta charset="UTF-8">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
<script type="text/javascript">
//
//通过闭包(Closure)和Object实现
//
//在闭包中声明好所有变量和方法,并通过一个JSON Object返回公有接口:

var NameSpace = window.NameSpace || {};
NameSpace.Hello = (function() {
  //待返回的公有对象
  var self = {};
  //私有变量或方法
  self.name = 'world';
  //公有方法或变量
  self.sayHello = function(_name) {
    return 'Hello ' + (_name || this.name);
  };
  //返回的公有对象
  return self;
} ());

alert(NameSpace.Hello.sayHello());
alert(NameSpace.Hello.sayHello('Jim'));
</script>
 </body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> NameSpace.Hello4 </title>
  <meta charset="UTF-8">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
<script type="text/javascript">
//
//通过闭包(Closure)和Object实现
//
//在闭包中声明好所有变量和方法,并通过一个JSON Object返回公有接口:

var NameSpace = window.NameSpace || {};
NameSpace.Hello = (function() {
  //待返回的公有对象
  var self = {};
  //私有变量或方法
  var name = 'world';
  //公有方法或变量
  self.sayHello = function(_name) {
    return 'Hello ' + (_name || name);
  };
  //返回的公有对象
  return self;
} ());

alert(NameSpace.Hello.sayHello());
alert(NameSpace.Hello.sayHello('Jim'));
</script>
 </body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> NameSpace.Hello5 </title>
  <meta charset="UTF-8">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
<script type="text/javascript">
//
//通过闭包(Closure)和Object实现
//
//Object和闭包的改进型写法
//
//上个例子在内部对公有方法的调用也需要添加self,如:self.sayHello(); 这里可以最后再返回所有公有接口(方法/变量)的JSON对象。
//
var NameSpace = window.NameSpace || {};
NameSpace.Hello = (function() {
  var name = 'world';
  var sayHello = function(_name) {
    return 'Hello ' + (_name || name);
  };
  return {
    sayHello: sayHello
  };
} ());

alert(NameSpace.Hello.sayHello());
alert(NameSpace.Hello.sayHello('Jim'));
</script>
 </body>
</html>

 

posted @ 2017-12-25 11:19  sky20080101  阅读(227)  评论(0)    收藏  举报