Js组件的一些写法
2023-06-13 09:14:24 时间
今天看了rank的一篇javascript脚本控件topic,突然想总结一下一些写JS组件的方法,或者说一些不同人的不同codingstyle。
首先看下Prototype里的写法:
复制代码代码如下:
首先看下Prototype里的写法:
varClass={
create:function(){
returnfunction(){this.init.apply(this,arguments);}
}
}
varA=Class.create();
A.prototype={
init:function(msg){
this.msg=msg;
},
fn:function(){
alert(this.msg);
}
}
vara=newA("myMsg");
a.fn();
如果你不喜欢上面这一大堆Class.create之类的,你也可以这样:
functionA(){}//varA=function(){}
A.prototype={
init:function(msg){
this.msg=msg;
},
fn:function(){
alert(this.msg);
}
}
vara=newA();
a.init("myMsg");
a.fn();
当然,也可以把this.msg的初始化放到functionA(msg){this.msg=msg;}里。总之你会发现这样调用很麻烦,并且参数是固定对应好的。
你如果既不愿搞一大堆Class.create,也不愿调用不方便,那就把Prototype里的varClass={...}和varA=Class.create();合并起来。得到:
functionA(){
this.init.apply(this,arguments);
}
A.prototype={
init:function(msg){
this.msg=msg;
},
fn:function(){
alert(this.msg);
}
}
vara=newA("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(){...}
然后还有人喜欢这样去写组件:
varA=function(msg){
this.msg=msg;
var_this=this;
varprivateFn1=function(){
alert(_this.msg);
}
varprivateFn2=function(){
alert(_this.msg);
}
return{fn1:privateFn1,fn2:privateFn2};
}
vara=newA("myMsg");
a.fn1();
这边一定要把A构造的对象this放到临时变量_this中哦,因为运行时,privateFn1的函数体内this实际是{fn1:...,fn2:...}这样的匿名对象,你可以用this.hasOwnProperty("fn1")去测试。this是在运行时才有意义的一个东西。另外这种方法每个对象都会有privateFn1和privateFn2的副本,这种方法不太好。
(未完待续,下面会讲些不同框架的一些写法)
作者:JayChow
相关文章
- html如何只刷新页面指定,js控制页面刷新 JS刷新当前页面的几种方法总结
- php 中js跳转页面跳转页面,js跳转代码_PHP页面跳转 Js页面跳转代码[通俗易懂]
- 用JS获取地址栏url参数的方法_js的url是啥
- 关于JS执行顺序
- JS对象转数组_js怎么把数组转成对象
- JS获取当前时间(精确到秒)「建议收藏」
- 强大的图片预览组件Viewer.js
- JS设置定时器_js设置定时器
- 用Js怒刷LeetCode_2023-02-27
- JS 性能优化之节流
- js 快速将日期格式转换为时间戳
- Node.js中使用Lodash
- JS动态引入js、CSS动态创建script/link/style标签详解编程语言
- 创建JS文件:在Linux下实现自动化任务(linux创建js文件)
- 快速掌握JS操作MySQL数据库技巧(js操作mysql数据库)
- js仿记事本查找div里的内容
- 使用JS实现Redis数据读取(js读取redis)
- 妙用JS获取Oracle信息的快速方法(js获取Oracle)
- 使用JS控制Oracle数据库的更新(js控制oracle更新)
- JavaScript实现Oracle数据库连接与操作(js怎么连接oracle)
- 简单的用js实现过滤多余字符的正则表达式
- CSS和JS标签style属性对照表(方便js开发的朋友)
- js判断是否为数组的函数:isArray()
- 远离JS灾难css灾难之js私有函数和css选择器作为容器
- JS将所有对象s的属性复制给对象r(原生js+jquery)
- js获取当前地址JS获取当前URL的示例代码
- 引入autocomplete组件时JS报未结束字符串常量错误
- js处理php输出时间戳对不上号的解决方法