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 相关文章推荐
20款非常优秀的 jQuery 工具提示插件 推荐
Jul 15 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
Feb 05 Javascript
jQuery中获取Radio元素值的方法
Jul 02 Javascript
详解AngularJS的通信机制
Jun 18 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
May 09 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
Easyui在treegrid添加控件的实现方法
Jun 23 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
Apr 28 jQuery
angularJs select绑定的model取不到值的解决方法
Oct 08 Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 Javascript
js 函数性能比较方法
Aug 24 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
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
js实现select跳转功能代码
2014/10/22 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
Python自动扫雷实现方法
2015/07/25 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
python用post访问restful服务接口的方法
2018/12/07 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
美国手机支架公司:PopSockets
2019/11/27 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
简单说说tomcat的配置
2013/05/28 面试题
室内设计实习自我鉴定
2013/09/25 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
高二政治教学反思
2014/02/01 职场文书
课例研修方案
2014/05/31 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书