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的文字自动截取(提供源代码)
Aug 09 Javascript
javascript unicode与GBK2312(中文)编码转换方法
Nov 14 Javascript
jquery中常用的函数和属性详细解析
Mar 07 Javascript
jQuery实现冻结表头的方法
Mar 09 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
Oct 02 Javascript
javascript日期验证之输入日期大于等于当前日期
Dec 13 Javascript
jqPlot jQuery绘图插件的使用
Jun 18 Javascript
vue axios用法教程详解
Jul 23 Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 jQuery
简单两步使用node发送qq邮件的方法
Mar 01 Javascript
仿ElementUI实现一个Form表单的实现代码
Apr 23 Javascript
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
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上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
python使用Berkeley DB数据库实例
2014/09/26 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
python TCP包注入方式
2020/05/05 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python中如何使用虚拟环境
2020/10/14 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
马来西亚网上购物:Youbeli
2018/03/30 全球购物
实习评语
2013/12/16 职场文书
身边的榜样活动方案
2014/08/20 职场文书
社保转移委托书范本
2014/10/08 职场文书
苏州园林导游词
2015/02/03 职场文书
创业计划之特色精品店
2019/08/12 职场文书