JavaScript对象创建的几种方式总结

JavaScript对象创建的几种方式总结

 

1.通过 对象字面量 创建单例对象

 

/**

 * Created by kikop on 2018/2/25.

 */

var objectLiteralManager = {

 

    //如何设置私有是关键,函数中使用时,this 限定

    defaultName: null,

    defaultArray: [],

 

    setName: function (tmpDefaultName) {

        this.defaultName = tmpDefaultName;

    },

    setArray: function (tmpArrays) {

 

        for (var i = 0; i < tmpArrays.length; i++) {

            this.defaultArray.push(tmpArrays[i]);

        }

 

    },

    getName: function () {

 

        //1.正确判断方式

        //if (null == this.defaultName) {

        //    this.defaultName = 'undefine value.';

        //}

        return this.defaultName;

    },

    getName_Global: function () {

 

        //1.正确判断方式

        //if(null ==this.defaultName){

        //    this.defaultName='undefine';

        //}

        //return this.defaultName;

 

        //2.错误使用,这里容易出错

 

        // 不加this ,这里 defaultName是 全局的

        defaultName = 'hello';

        if (defaultName == undefined) {

            defaultName = 'undefine';

        }

        return this.defaultName;

    },

};

//调试

$(function () {

 

    //objectLiteralManager.setName('hello,objectLiteralManager');

    //console.log(objectLiteralManager.getName());

    //

    //objectLiteralManager.setArray(['a', 'b', 'c']);

    //console.log(objectLiteralManager.defaultArray);

 

})

 

2.简单模块模式

 

function BaseComponent() {

}

 

function OtherComponent() {

}

 

 

//先赋值(返回对象的匿名函数)函数表达式,再执行

var simpleModulePattern = function () {

 

    //1.定义私有变量

    var privateVar = 10;

 

    var components = new Array();

    //初始化

    components.push(new BaseComponent());

 

    //2.定义私有函数

    function privateFunc() {

        console.log('privateFunc...')

        //return false;

    }

 

    //3.返回共用方法和属性

    return {

        publicProperty: true,

        publicMethod: function () {

            //privateVar++;

 

            //指向 私有方法

            return privateFunc();

        },

        getComponentCount: function () {

            return components.length;

        },

 

        registerComponent: function (component) {

            if (typeof component == "object") {

                components.push(component);

            }

        }

    }

}();

 

//调试

$(function () {

 

    //simpleModulePattern.publicMethod();

    //

    //simpleModulePattern.publicProperty=false;

    //console.log(simpleModulePattern.publicProperty);

    //

    //

    //

    //console.log(simpleModulePattern instanceof Object);

    //console.log(simpleModulePattern.getComponentCount());

    //simpleModulePattern.registerComponent(new OtherComponent());

    //console.log(simpleModulePattern.getComponentCount());

 

 

})

 

3.增强型模块模式

var advModulePattern = function () {

 

    //1.定义私有变量

    var components = new Array();

    //初始化

    components.push(new BaseComponent());

 

 

    var app = new BaseComponent();

 

    app.getComponentCount = function () {

        return components.length;

    };

 

    app.registerComponent = function (component) {

        if (typeof component == "object") {

            components.push(component);

        }

    };

 

    //3.返回该类型的 app

    return app;

 

}();  //立即执行

 

//调试

$(function () {

 

    //alert(advModulePattern instanceof BaseComponent);

    //advModulePattern.registerComponent(new OtherComponent());

    //alert(advModulePattern.getComponentCount());  //2

 

});

 

4.属于实例的私有变量

function Person(name) {

 

    //1.定义私有变量

    var privateVar = 10;

 

 

    //2.定义私有函数

    function privateFunc() {

        //在函数 Person内部可以访问 privateVar

        privateVar++;

        console.log('privateFunc...' + privateVar)

    }

 

    //3.定义特权方法

    this.getName = function () {

        return name;

    };

    this.setName = function (tmpName) {

        name = tmpName;

    };

    this.privateFuncWrap = function () {

        return privateFunc();

    }

}

 

//调试

$(function () {

 

    //var p1 = new Person('kikop');

    //console.log(p1.getName());

    //p1.privateFuncWrap();

    //

    //var p2 = new Person('kikop2');

    //console.log(p2.getName());

    //p2.privateFuncWrap();

 

});

 

5.块级作用域(又叫私有作用域)

(function () {

    //定义 块级作用域

    console.log('here is private range!');

 

})();

 

6.总结

//函数声明后面不可以跟圆括号

//函数表达式后面可以跟圆括号

//函数声明加个括号则被提升为函数表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值