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分页脚本
May 21 Javascript
jQuery新闻滚动插件 jquery.roller.js
Jun 27 Javascript
fancybox modal的完美解决(右上的X)
Oct 30 Javascript
杨氏矩阵查找的JS代码
Mar 21 Javascript
5秒后跳转到另一个页面的js代码
Oct 12 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
Nov 22 Javascript
jquery动态改变form属性提交表单
Jun 03 Javascript
jQuery.position()方法获取不到值的安全替换方法
Mar 13 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
Nov 29 Javascript
js实现可键盘控制的简单抽奖程序
Jul 13 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
聊聊Vue中provide/inject的应用详解
Nov 10 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
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHPThumb图片处理实例
2014/05/03 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Python整数对象实现原理详解
2019/07/01 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
使用python模拟命令行终端的示例
2019/08/13 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
营销经理工作检讨书
2014/11/03 职场文书
党员公开承诺书2015
2015/01/21 职场文书
社会实践活动总结
2015/02/05 职场文书
公务员年终个人总结
2015/02/12 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
redis实现的四种常见限流策略
2021/06/18 Redis