Skip to content

Instantly share code, notes, and snippets.

@lqt0223
Last active April 11, 2017 11:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lqt0223/0642888808c8cd4328ee4fd8ff0369f8 to your computer and use it in GitHub Desktop.
Save lqt0223/0642888808c8cd4328ee4fd8ff0369f8 to your computer and use it in GitHub Desktop.
07 Using JavaScript closure to make fields and methods private

JavaScript闭包实现对象、类的私有属性和方法

网上有大量讨论JavaScript的闭包的用法的文章,而且结合了函数作用域等JavaScript的很底层的知识。鉴于自己都没有在代码中有意识地写过闭包,这些文章看起来自然是很吃力了。而且看了N多篇也不能回答,到底怎样的一段代码才叫做闭包,这个问题。

但很多文章也同样提到了,JavaScript的闭包可以实现对象、类的私有属性和方法。于是今天试着写了一下下面的代码,感觉豁然开朗。这样一来,自己对于闭包到底是什么依然不是很清晰,但是至少可以实现一些之前自己实现不了的东西了。

以下是代码:

var People = function (){
  // private function should work within closure
  init();
  function init(){
    console.log("created");
  }
  var name = "default";
  function setName(n){
    name = n;
  };
  function getName(){
    return name;
  }
  return {getName, setName};
}

var p = People();
p.setName("lqt");
console.log(p.getName());

/* return

created
lqt

*/
``` 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment