一 函数申明、函数表达式、对象
函数申明毫无疑问,没有调用的情况下,里面的变量、函数都是不能够访问到的
function MyObject() {
var privateVarible = ;
function privateFunction() {
return false;
}
this.publicMethod = function() {
return true;
}
}
函数表达式,相当于调用函数申明,如下
function MyObject() {
var privateVarible = ;
function privateFunction() {
return false;
}
this.publicMethod = function() {
return true;
}
}
var run = MyObject();
var run = MyObject();是函数表达式,run是其引用,无论是run.privateVarible、run.privateFunction()、run.publicMethod()都是访问不到的,因为function MyObject(){…}没有返回值。
function MyObject() {
var privateVarible = ;
function privateFunction() {
return false;
}
this.publicMethod = function() {
return true;
}
return this;
}
var run = MyObject();
alert(run.publicMethod());
有了返回值后是可以访问run.publicMethod()的,但由于只返回了this对象run.privateVarible、run.privateFunction()还是不能访问到,这样就实现了私有属性和公有属性的效果。
下面代码中test是自运行的,是函数表达式,可以访问到其中的test.f1()、test.f2()。
var test = (function(){
function f1(){
alert("f1");
}
function f2(){
alert("f2");
}
return {
f1:f1,
f2:f2
};
})();
对象,如果把下面函数申明当做构造函数来用的话
function MyObject() {
var privateVarible = ;
function privateFunction() {
return false;
}
this.publicMethod = function() {
return true;
}
}
var run = new MyObject();
run就是一个实例化的对象了,run.publicMethod()肯定是能够访问的,但run对象只有一个属性就是publicMethod。
二 使用对象的属性方式访问
var test = {
f1: function (){
alert("f1");
},
f2: function (){
alert("f2");
}
}
test.f1();
这样同样是能访问的。
用途一:
写一些配置文件(常量),让代码更加规范
var APP = {
control: "vote-control",
answer : "vote-answer",
result : "vote-result",
rush: "vote-rush",
server:"voteSer",
select: "vote-select",
main:"vote-main",
edit:"vote-edit",
justsink:"JustSink"
};
用途二:
写工具类,作为基础工具使用
var shellcmd = {};
/**
* 打开程序
*/
shellcmd.shellExecute = function (filePath) {
var def = jQuery.Deferred();
...
}
/**
* 读文件,同步
* @param filePath
* @returns {string}
*/
shellcmd.readFile = function (filePath) {
if (!filePath)
...
}
}
/**
* 写文件,同步
* @param {!string} content 可选,如果为空则认为是写入空字符串
* @param {!string} filePath 文件路径
*/
shellcmd.writeFile = function (filePath, content) {
var path=require('path');
...
}
/**
* 拷贝文件
* @param {!string} content 可选,如果为空则认为是写入空字符串
* @param {!string} filePath 文件路径
*/
shellcmd.copyFile = function (src, des) {
var defer = jQuery.Deferred();
...
}
三 最普通的访问方式
在一个js文件中建立很多的 function ,在引入该js后直接调用所需的方法,我感觉这样代码的可读性较差。
var http = require('http');
var fs = require('fs');
function loader(config) {
...
}
/**
* 同步本地应用列表数据
* @param callback
* @param callback.info APP数据
*/
function syncLocalAppList(callback) {
...
}
//判断plugins文件夹是否存在
function fnmkdir(config) {
...
}