命名空间

var MYNAMESPACE = MYNAMESPACE || {};

//构造函数
MYNAMESPACE.Child = function () {}
// 变量
MYNAMESPACE.mystr= '6-ara forerer'

MYNAMESPACE.Person = function(name) {
    this.name = name;
};
//原型
MYNAMESPACE.Person.prototype.getName = function() {
    return this.name;
};

// 使用方法
var p = new MYNAMESPACE.Person("Bob");
p.getName();        // bob
。

命名空间函数实例

//命名空间实现函数示例
var MYAPP = MYAPP || {}
MYAPP.namespace = function (ns_string){
    var parts = ns_string.spilt('.'),
        parent = MYAPP,
        i;
    //剥离前面的冗余变量
    if(parts[0]==='MYAPP'){
        parts=parts.slice(1)
    }
    for (i=0;i<parts.length;i+=1) {
    //如果它不存在,就创建一个属性
        if(typeof parent[parts[i]]==="undefined"){
            parent[[parts[i]]={}; 
        }
        parent= parent[parts[i]]
    }
    return parent
}
//使用
//将返回值赋给局部变量
var mymodule = MYAPP.namespace('MYAPP.module.mymodule');
mymodule === MYAPP.module.mymodule //true
//忽略空间MYAPP
MYAPP.namespace('module.youmodule')

私有属性和方法

JS中没有特殊语法来表示私有或公共属性的语法,但我们可以用闭包来实现此功能

//构造函数获得私有性
function Gadget() {
    //私有成员
    var name = 'Bob'
    //公有函数
    this.getName= function(){
        return name
    }
}
var toy = new Gadget()
console.log(toy.name) //输出undefined
console.log(toy.getName()) //输出Bob

//对象字面量获得私有性
var myobj = (function () {
    //私有成员
    var name = 'Bob'
    
    //实现公有部分
    return {
        getName: function () {
            return name;
        }
    }
}())
myobj.getName() //输出Bob

原型私有性
function Gadget() {
    //私有成员
    var name = 'Bob'
    //公有函数
    this.getName= function(){
        return name
    }
}
Gadget.prototype = (function(){
    //私有成员
   var color= black
    return {
       getColor: function (){
           return color
       }
    }
})

模块模式

//1、建立一个命名空间
MYAPP.namespace('MYAPP.myarray.userarray')
//2、定义该模块,即时函数返回具有接口的模块
MYAPP.myarray.userarray = (function () {
    return {
        //do somting
    }
}())
//3、向公共接口提交一些方法
MYAPP.myarray.userarray = (function () {
    return {
        getName: function (name){
            //
        }
    }
}())

//揭示模块模式,只暴露最后设立的API方法
MYAPP.namespace('MYAPP.myarray.userarray')
MYAPP.myarray.userarray = (function () {
    //私有属性...
    var a =1;
    //私有方法
    var getName = function (name){
        console.log(name)
    }
    return {
        getName:getName
    }
}())

将全局变量导入到模块中

MYAPP.myarray.userarray = (function (app,glbal) {
  //引用全局对象
 //以及现在被转换为局部变量的命名空间对象
}(MYAPP, this))

ZONE_98F
357 声望27 粉丝