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 var变量隐式声明方法
Oct 19 Javascript
javascript 用原型继承来实现对象系统
Mar 22 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
Dec 09 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
Sep 30 Javascript
详解js数组的完全随机排列算法
Dec 16 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
微信小程序 动画的简单实例
Oct 12 Javascript
vue-cli中的babel配置文件.babelrc实例详解
Feb 22 Javascript
详解javascript中的Error对象
Apr 25 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
Jun 11 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.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
PHP Header用于页面跳转要注意的几个问题总结
2008/10/03 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
jquery delay()介绍及使用指南
2014/09/02 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
Python中运行并行任务技巧
2015/02/26 Python
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
Python使用进程Process模块管理资源
2020/03/05 Python
通俗讲解python 装饰器
2020/09/07 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
骆驼官方商城:CAMEL
2016/11/22 全球购物
历史系自荐信范文
2013/12/24 职场文书
建筑项目策划书
2014/01/13 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
公司寄语大全
2014/04/10 职场文书
商务助理求职信范文
2014/04/20 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
2015年售票员工作总结
2015/04/29 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python