天天看点

JS 函数访问方式总结

一 函数申明、函数表达式、对象

函数申明毫无疑问,没有调用的情况下,里面的变量、函数都是不能够访问到的

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) {
    ...
}