2019-03-20闭包的理解和应用

闭包:指一个函数允许访问另一个函数中的成员,广义来说,闭包可以访问声明它的作用域中的所有成员。

1.构造函数的私有属性和特权方法

//构造函数

var Stu1 = function(name){

    this.name = name;

    this.getName = function () {

        return this.name;

    };

}

var stu1 = new Stu1('Ann');

console.log(stu1.name);//Ann

console.log(stu1.getName());//Ann

------------------------------------------------------------------

var Stu2 = function(username){

    //私有成员,用'var'

    var name = username;

    //函数内部可以访问私有属性,形成了一个闭包

    //这个方法还有一个名称:特权方法

    this.getName = function () {

        return name;

    };

}

var stu2 = new Stu2('Peter');

//外部不能直接访问到函数变量

console.log(stu2.name);//undefined

//构造函数中的闭包,提供了私有成员的访问接口

console.log(stu2.getName());//Peter

2.对象字面量的私有属性和特权方法

//创建一个对象,创建在全局

var obj2 = null;//null就是对象,比{}好

//创建自执行函数

(function(){

    //私有成员

    var name = "Peter";

    //公共方法:给全局对象变量obj2赋值

    obj2 = {

        //特权方法

        getName:function() return name; }

    }

}());

// 外部对象只能通过访问这个特权方法来访问私有属性

console.log(obj2.getName())

//换一种语法风格

var obj3 = (function (){

    // 私有成员

    var name = 'dsj';

    // 公共方法, 给全局变量obj3赋值

    return  {

        //特权方法

        getName: function () { return name; }

    };

}());

//外部对象只能通过访问这个特权方法来访问私有属性

var res2 = obj3.getName();

3.私有静态成员

//创建特权方法,访问私有静态成员/

var Demo1 = (function(){

    //私有静态成员: 可以将前一次的调用结果保存,并被下一次调用引用

    var counter = 0;

    //新构建函数

       var NewDemo1 = function(){

        counter += 1;

    };

    //特权方法;在这个新构建函数的原型上创建

    NewDemo1.prototype.getCounter = function(){

        return counter;

    };

    return NewDemo1;

}());

var newObj1 = new Demo1();

console.log(newObj1.getCounter());

var newObj2 = new Demo1();

console.log(newObj2.getCounter())

分享来自https://www.html.cn/js/javascript/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。