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 相关文章推荐
单元选择合并变色示例代码
May 26 Javascript
Javascript正则控制文本框只能输入整数或浮点数
Sep 02 Javascript
JavaScript驾驭网页-CSS与DOM
Mar 24 Javascript
JavaScript必知必会(七)js对象继承
Jun 08 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
详解基于angular-cli配置代理解决跨域请求问题
Jul 05 Javascript
浅析Vue中method与computed的区别
Mar 06 Javascript
vue中使用props传值的方法
May 08 Javascript
layer.confirm()右边按钮实现href的例子
Sep 27 Javascript
vue实现抽屉弹窗效果
Nov 15 Javascript
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
Handtrack.js库实现实时监测手部运动(推荐)
Feb 08 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中call_user_func_array()函数的用法演示
2012/02/05 PHP
PHP速成大法
2015/01/30 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
js换图片效果可进行定时操作
2014/06/09 Javascript
javascript操作数组详解
2014/12/17 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
java必学必会之static关键字
2015/12/03 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
原生js实现日历效果
2020/03/02 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
python中有帮助函数吗
2020/06/19 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
护士辞职信怎么写
2015/02/27 职场文书
全陪导游词开场白
2015/05/29 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
工作表现证明
2015/06/15 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript