Js组件的一些写法


Posted in Javascript onSeptember 10, 2010

今天看了rank的一篇javascript脚本控件topic,突然想总结一下一些写JS组件的方法,或者说一些不同人的不同coding style。

首先看下Prototype里的写法:

var Class = { 
create: function() { 
return function() { this.init.apply(this, arguments); } 
} 
} 
var A = Class.create(); 
A.prototype = { 
init: function(msg) { 
this.msg = msg; 
}, 
fn: function() { 
alert(this.msg); 
} 
} 
var a = new A("myMsg"); 
a.fn();

如果你不喜欢上面这一大堆Class.create之类的,你也可以这样:
function A() { } //var A = function(){} 
A.prototype = { 
init: function(msg) { 
this.msg = msg; 
}, 
fn: function() { 
alert(this.msg); 
} 
} 
var a = new A(); 
a.init("myMsg"); 
a.fn();

当然,也可以把this.msg的初始化放到function A(msg){this.msg=msg;}里。总之你会发现这样调用很麻烦,并且参数是固定对应好的。

你如果既不愿搞一大堆Class.create,也不愿调用不方便,那就把Prototype里的var Class = {...} 和 var A = Class.create();合并起来。得到:

function A() { 
this.init.apply(this, arguments); 
} 
A.prototype = { 
init: function(msg) { 
this.msg = msg; 
}, 
fn: function() { 
alert(this.msg); 
} 
} 
var a = new A("myMsg"); 
a.fn();

看上去干净了许多,但是如果你的库里有很多组件,则每个组件都要写一遍this.init.apply(this, arguments); 如果用Class.create的话,则只要写一个Class,然后每个组件执行下Class.create()即可。当然,每个组件都写一遍this.init.apply(this, arguments);也没啥不好的,还是看个人喜好了。另外写原型方法是合在一起还是分开来写也是个人喜好,出于封装的角度,合一起好,但是分开有时候显的更清晰。譬如A.prototype.init=function(msg){...} A.prototype.fn=function(){...}

然后还有人喜欢这样去写组件:

var A = function(msg) { 
this.msg = msg; 
var _this = this; 
var privateFn1 = function() { 
alert(_this.msg); 
} 
var privateFn2 = function() { 
alert(_this.msg); 
} 
return { fn1: privateFn1, fn2: privateFn2 }; 
} 
var a = new A("myMsg"); 
a.fn1();

这边一定要把A构造的对象this放到临时变量_this中哦,因为运行时,privateFn1的函数体内this实际是{fn1:...,fn2:...}这样的匿名对象,你可以用this.hasOwnProperty("fn1")去测试。this是在运行时才有意义的一个东西。另外这种方法每个对象都会有privateFn1 和 privateFn2的副本,这种方法不太好。

(未完待续,下面会讲些不同框架的一些写法)
作者:JayChow

Javascript 相关文章推荐
用jquery和json从后台获得数据集的代码
Nov 07 Javascript
jquery实现每个数字上都带进度条的幻灯片
Feb 20 Javascript
JavaScript实现快速排序的方法
Jul 31 Javascript
深入解析JavaScript中的立即执行函数
May 21 Javascript
javascript数组遍历的方法实例分析
Sep 13 Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 Javascript
webpack 2的react开发配置实例代码
Jul 28 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
Sep 03 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
Sep 13 Javascript
解决element ui select下拉框不回显数据问题的解决
Feb 20 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
Mar 05 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
Jul 13 Javascript
编写Js代码要注意的几条规则
Sep 10 #Javascript
jquery之empty()与remove()区别说明
Sep 10 #Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
Sep 10 #Javascript
有趣的javascript数组定义方法
Sep 10 #Javascript
心扬JS分页函数代码
Sep 10 #Javascript
JavaScript中获取元素索引的函数
Sep 10 #Javascript
document.getElementById的简写方式(获取id对象的简略写法)
Sep 10 #Javascript
You might like
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
php图片缩放实现方法
2014/02/20 PHP
javascript 拖动表格行实现代码
2011/05/05 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
vue如何判断dom的class
2018/04/26 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
解决python3 json数据包含中文的读写问题
2018/05/10 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python调用外部程序的实操步骤
2019/03/04 Python
python是否适合网页编程详解
2019/10/04 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
反邪教宣传工作方案
2014/05/07 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
初中生活随笔
2015/08/15 职场文书
高一军训口号
2015/12/25 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
mysql left join快速转inner join的过程
2021/06/30 MySQL
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis