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) { ... }
相关文章推荐
- JSON 4000 学习
- json数据解析
- 详解JavaScript中getFullYear()方法的使用
- JavaScript中判断函数、变量是否存在
- JavaScript检查手机格式是否错误
- Javascript中实现String.startsWith和endsWith方法
- D3js-画二维坐标轴(x轴,y轴)
- Javascript中判断对象是否为空
- javascript 清空iframe 支持IE
- JavaScript判断E-mail地址是否合法
- javascript事件委托的方式绑定详解
- JavaScript 自定义对象
- Javascript:谈谈JS的全局变量跟局部变量(转zyz511919766)
- 浅析JavaScript动画
- 一个js问题的解决方式
- Hammer.js
- 中国第二代身份证验证js代码
- js选下拉框 提交 (触发事件)
- js 操作table
- 浅析JavaScript动画