js面向对象设计用{}好还是function(){}好(构造函数)


Posted in Javascript onOctober 23, 2011

在网上看了很多JavaScript的项目, 用到对象都是采用{}的形式:
例如jQuery, TinyMCE等都是形如:

var Dialog = 
{ 
int : function() { .... }, 
insert : function() { .... }, 
pop : function() { .... } 
}; 
//调用就是: 
Dialog.init();

而我自己一直使用function闭包的方式, 感觉使用内部私有成员(函数,变量)更方便:

function classDialog() 
{ 
var box = "sdfsdf"; //init, insert等函数中调用公共变量就会很方便, 调用内部函数也很方便(如可以直接调用 search()). this.init = function() { .... }; 
this.insert = function() { .... }; 
this.pop = function() { .... }; 
function search() { .... } 
} 
var Dialog = new classDialog(); 
Dialog.init();

看到TinyMCE在需要使用似有函数的时候, 是在init : function() { } 这个函数内部又定义了一个函数, 但是这样的话, 这个函数就只能 init调用, 其他方法就没办法共用这个私有函数了.
当然暂时还没有看到一个私有函数被多个公共函数调用的例子.

我想问问各位大神么, 既然function(){} 闭包创建对象使用那么方便, 为什么 {} 方法还用的那么广泛呢?

是不是 function() {} 创建的对象有什么缺陷?

回复:
对于直接使用{}创建对象..这种情况在创建极少数对象的情况下且不需要封装的情况下使用,对于需要批量创建对象的情况使用构造函数来实例化对象就非常方便 主要还是看具体的情况吧

这两种是完全不一样的东西。

{}可以算做一个单例(单例模式)

function(){} 这种返回一个对象。每次都NEW的时候返回都是一个不同的对象!

上面有同学也说了 {} 更效率了。而且不用new。{} 全局固定,可任意扩展。

一般来说{}确实效率高,使用简单随意,不过不想暴漏某些方法时候用 function 更好

Javascript 相关文章推荐
让任务管理器中的CPU跳舞的js代码
Nov 01 Javascript
jquery select(列表)的操作(取值/赋值)
Mar 16 Javascript
把input初始值不写value的具体实现方法
Jul 04 Javascript
canvas实现手机端用来上传用户头像的代码
Oct 20 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
Dec 19 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 Javascript
微信小程序 数据遍历的实现
Apr 05 Javascript
react.js 获取真实的DOM节点实例(必看)
Apr 17 Javascript
jQuery extend()详解及简单实例
May 06 jQuery
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
JavaScript防止全局变量污染的方法总结
Aug 02 Javascript
微信小程序实现列表左右滑动
Nov 19 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 #Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 #Javascript
js两行代码按指定格式输出日期时间
Oct 21 #Javascript
jQuery中live方法的重复绑定说明
Oct 21 #Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
Oct 21 #Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
Oct 21 #Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
Oct 21 #Javascript
You might like
实用函数5
2007/11/08 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
优秀演讲稿范文
2013/12/29 职场文书
公司中秋节活动方案
2014/02/12 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
大学生就业意向书范文
2014/04/01 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
部队个人年终总结
2015/03/02 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
Redis主从复制操作和配置详情
2022/09/23 Redis