一 函數申明、函數表達式、對象
函數申明毫無疑問,沒有調用的情況下,裡面的變量、函數都是不能夠通路到的
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) {
...
}