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 相关文章推荐
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
Aug 21 Javascript
图片连续滚动代码[兼容IE/firefox]
Jun 11 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
Mar 05 Javascript
JavaScript中逗号运算符介绍及使用示例
Mar 13 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
Apr 01 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 Javascript
js实现Tab选项卡切换效果
Jul 17 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 Javascript
JavaScript模块管理的简单实现方式详解
Jun 15 Javascript
详解Vue的options
May 15 Vue.js
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
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
php之XML转数组函数的详解
2013/06/07 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
学习jquery之一
2007/04/27 Javascript
javascript引导程序
2008/10/26 Javascript
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python八皇后问题的解决方法
2018/09/27 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python字符串判断密码强弱
2020/03/18 Python
Django ORM filter() 的运用详解
2020/05/14 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
优秀毕业生自我鉴定
2014/01/19 职场文书
企业总经理职责
2014/02/02 职场文书
干部现实表现材料
2014/02/13 职场文书
岗位安全生产责任书
2014/07/28 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
纪录片信仰观后感
2015/06/08 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技