在JavaScript中创建对象
1. 字面常量法
var person = {};
2. 定义构造函数
function Person(){};
var person = function(){}
//定义一个person变量 并将匿名函数赋值给这个变量
var person = new Function();
封装作为面向对象语言的三大特性之一 JavaScript是如何实现的呢?
首先定义一个对象
function person(name){
this.name = name;
}
person.prototype = {
getName : function(){
return this.name;
}
}
这里的name和getName是共有的方法都可以访问。 JavaScript中只有函数作用域所以要实现私有变量可以这样
function person(newName){
var name;
//在这里定义特权函数可以访问私有变量 这里利用了JavaScript中的闭包特性
this.setName = function(){
name = newName;
}
this.getName = function(){
return name;
}
}
person.prototype = {
//定义其他不需要方法私有变量的函数
}
如果我们要实现类的私有静态变量和共有静态变量呢?
静态变量是类级别的所以可以通过类名直接调用要想实现私有就必须使用闭包
var person = (function(){
var person.wife = "tong";
return function(){
var name;
this.setName = function(){
name = newName;
}
this.getName = function(){
return name;
}
//可以再这里使用类的静态私有变量
}
})();
person.prototype = {
}
在上面的实例中我们大量的使用了闭包的特性
现在总结下闭包的使用场景:
1. 创建函数或者对象的私有变量
2. 将一段代码封装成一个模块,避免和外界的命名冲突
不过闭包也容易引起问题 例如内存泄露。
关于内存泄露会重新写一篇文章。