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 post方式传递提交的实现代码
May 31 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 Javascript
js基础知识(公有方法、私有方法、特权方法)
Nov 06 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
May 28 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
微信小程序 数组中的push与concat的区别
Jan 05 Javascript
在vue中获取dom元素内容的方法
Jul 10 Javascript
node内置调试方法总结
Feb 22 Javascript
微信小程序实现全局搜索代码高亮的示例
Mar 30 Javascript
Vue快速实现通用表单验证的示例代码
Jan 09 Javascript
JavaScript利用键盘码控制div移动
Mar 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
php session 错误
2009/05/21 PHP
php绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
javaScript基础详解
2017/01/19 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
vue实现购物车案例
2020/05/30 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
开始着手第一个Django项目
2015/07/15 Python
python简单实现刷新智联简历
2016/03/30 Python
Python yield 使用方法浅析
2017/05/20 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python线程池threadpool使用篇
2018/04/27 Python
对python sklearn one-hot编码详解
2018/07/10 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
python中的协程深入理解
2019/06/10 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
linux面试相关问题
2012/08/11 面试题
有针对性的求职自荐信
2013/11/14 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
员工离职通知函
2015/04/25 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS