您的位置:首页 > Web前端 > JavaScript

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

2018-02-25 13:15 645 查看
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.总结

//函数声明后面不可以跟圆括号//函数表达式后面可以跟圆括号//函数声明加个括号则被提升为函数表达式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: