js 面向对象编程 - 单例模式

2019-01-19  本文已影响15人  路上灵魂的自由者

// 面向对象编程(Object Oriented Programming)

/*

* 单例设计模式(Singleton Pattern)

* 1.表现形式

* var obj ={

*   xx: xxx,

*   ..

*  }

* 在单例设计模式中,OBJ不仅仅是对象名,他被称为”命名空间【NameSpace】“,把描述事务的属性存放到命名空间中,多个命名空间是独立分开的,互不冲突

* 2.作用

* =》把描述同一件事务的属性的特征进行”分组,归类“(存储在同一个堆内存空间中),因此避免了全局变量之间的冲突和污染

* var pattern1 = {name:'xxx'};

* var pattern2 = {name:'xxx'};

*

*

* 3.单例设计模式命名的由来

* =》每一个命名空间都是JS中OBJECT这个内置基类的实例,而实例之间 是相互独立互不干扰的,所以我们称他为"单例:单独的实例"

*/

/*

var name = "";

var age = 18;

var sex = 'box';

var name = "小龙女";

var age = 81;

var sex = "girl"

*/

/*

var person1 = {

name: '杨过',

age: 18

}

var person2 = {

name: '小龙女',

age: 81

}

*/

/*

* 高级单例模式

* 1.在给命名空间赋值的时候,不是直接赋值一个对象,而是先执行匿名函数,形成一个私有作用域AA(不销毁的栈内存),在AA中创建一个堆内存,把堆内存地址赋值给命名空间

* 2.这种模式的好处:我们完全可以在AA中创造很多内容(变量OR函数),哪些需要供外面调取使用,我们暴露到返回的对象(模块化实现的一种思想)

*/

/*

var nameSpace = (function(){

    var n = 12;

    function fn(){

        //...

    }

    function sum(){

        //...

    }

    return {

        fn: fn,

        sum: sum

    }

})()

*/

/*

*this

    1.给当前元素的某个事件绑定方法,当事件触发方法钟的THIS是当前操作的元素对象

        oBox.onclick = function(){

            // this: oBox

        }

    2. 普通函数执行,函数中的this取决于执行的主体,this就是谁(执行主体:方法执行,看方法名前面是否有”点“,有的话,点前面是谁this就是谁,没有this是window)。 自执行函数执行,方法中的this是window

        function fn(){

            console.log(1)

        }

        var obj = {aa:fn};

        obj.aa(); // this:obj 

        fn()      // this:window

         ~function (){

            //=> this:window 自执行函数执行,方法中的this是window

        }();

    3.

*/


### 面试题

var n = 2;

var obj = {

    n:3,

    fn:(function(n){

        n*=2;

        this.n+=2;  // window

        var n =5;

        return function(m){

            this.n*=2

            console.log(m+(++n));

        }

    })(n)

}

var fn = obj.fn;

fn(3)        //9

obj.fn(3);  //10

console.log(n,obj.n)  //8,6

上一篇 下一篇

猜你喜欢

热点阅读