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 相关文章推荐
javascript中的数字与字符串相加实例分析
Aug 14 Javascript
通过length属性判断jquery对象是否存在
Oct 18 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
深入理解javascript构造函数和原型对象
Sep 23 Javascript
AngularJS使用ng-options指令实现下拉框
Aug 23 Javascript
关于vue.js过渡css类名的理解(推荐)
Apr 10 Javascript
JavaScript闭包的简单应用
Sep 01 Javascript
写给小白看的JavaScript异步
Nov 29 Javascript
Bootstrap Paginator+PageHelper实现分页效果
Dec 29 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
layui 对table中的数据进行转义的实例
Sep 12 Javascript
vue-router 按需加载 component: () => import() 报错的解决
Sep 22 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 管理系统程序中的后门
2009/08/05 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python实现处理管道的方法
2015/06/04 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
将python图片转为二进制文本的实例
2019/01/24 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
浅析python中while循环和for循环
2019/11/19 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
Keras 使用 Lambda层详解
2020/06/10 Python
AHAVA美国官方网站:死海海泥护肤品牌
2016/10/18 全球购物
软件测试常见笔试题
2012/02/04 面试题
社区母亲节活动方案
2014/03/05 职场文书
初三学生评语大全
2014/04/24 职场文书
医院见习总结
2015/06/24 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
Mysql案例刨析事务隔离级别
2021/09/25 MySQL