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 相关文章推荐
JQuery的ajax获取数据后的处理总结(html,xml,json)
Jul 14 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
javascript中eval和with用法实例总结
Nov 30 Javascript
第二章之Bootstrap 页面排版样式
Apr 25 Javascript
node.js调用Chrome浏览器打开链接地址的方法
May 17 Javascript
原生JS 购物车及购物页面的cookie使用方法
Aug 21 Javascript
详解extract-text-webpack-plugin 的使用及安装
Jun 12 Javascript
JS高级技巧(简洁版)
Jul 29 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
Dec 10 Javascript
详解vuex commit保存数据技巧
Dec 25 Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 Javascript
js实现购物车商品数量加减
Sep 21 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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
php Session存储到Redis的方法
2013/11/04 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
PHP线程的内存回收问题
2016/07/08 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
Angularjs 基础入门
2014/12/26 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
python中的代码编码格式转换问题
2015/06/10 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
对python中UDP,socket的使用详解
2019/08/22 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
Python如何批量生成和调用变量
2020/11/21 Python
台湾最大网路书店:博客来
2018/03/18 全球购物
安德玛比利时官网:Under Armour比利时
2019/08/28 全球购物
报到证丢失证明
2014/01/11 职场文书
全民健身日活动方案
2014/01/29 职场文书
关于元旦的广播稿
2014/02/16 职场文书
个人安全生产承诺书
2014/05/22 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
党支部考察意见范文
2015/06/02 职场文书
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang