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

JS 函数访问方式总结

2015-06-10 09:46 495 查看

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

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

function MyObject() {
var privateVarible = 10;

function privateFunction() {
return false;
}

this.publicMethod = function() {
return true;
}
}


函数表达式,相当于调用函数申明,如下

function MyObject() {
var privateVarible = 10;

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 = 10;

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 = 10;

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) {
...
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: