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 相关文章推荐
用js自动判断浏览器分辨率的代码
Jan 28 Javascript
JavaScript实现表格排序方法
Jun 14 Javascript
jquery实现的Accordion折叠面板效果代码
Sep 02 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
JavaScript SHA-256加密算法详细代码
Oct 06 Javascript
webpack 2的react开发配置实例代码
Jul 28 Javascript
webpack 样式加载的实现原理
Jun 12 Javascript
在vue中使用setInterval的方法示例
Apr 16 Javascript
详解babel升级到7.X采坑总结
May 12 Javascript
微信小程序实现搜索功能
Mar 10 Javascript
JavaScript中reduce()的5个基本用法示例
Jul 19 Javascript
Vue.js暴露方法给WebView的使用操作
Sep 07 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
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
js select option对象小结
2013/12/20 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
学期自我鉴定范文
2013/10/01 职场文书
单位人事专员介绍信
2014/01/11 职场文书
军训自我鉴定怎么写
2014/02/13 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
合作合同协议书
2016/03/21 职场文书