jsdefineSetter-给js的"class"自动增加一个set的属性(方法)
2023-06-13 09:13:56 时间
写注释不是我的强项,有什么问题请在评论中写出来:D
写一个JS class时,如
写一个JS class时,如
为了容易理解代码,以及更好的区分public和private的变量,我通常用set...方法(...为某(些)成员变量)来赋值给类的成员。这些set方法当然就是public的。还有一点就是使代码能够更规范一些。
然而问题就出在这里,如果以上代码不考虑验证有效性(或者只验证简单的有效性),那我们就会多出很多的代码,试想一个类有20个成员(属性),那么我们就得加20个set...方法,实在多余,因此,要想办法来解决这个问题。
回忆在Mozilla中,有__defineSetter__和__defineGetter__的方法来给DOM增加成员,给开发人员带来很多方便。我们也来仿一个js版的__defineSetter。
简单的思路:
利用JS动态给对象增加方法(或属性)
但类中方法不必再添加set...此类方法。
非[a-z]区间的属性也不再添加set...此类方法。
写出实现代码
基本实现了_defineSetter,而我们要一个个的defineSetter岂不是太麻烦了。既然已经实现了原型,那么用原型来动态绑定到Function对象上,一行代码就解决了set..方法了。
Function.prototype.defineAllSetter = function (hdle) {
for (var i in this.prototype)
_defineSetter.apply(this, [this,i,hdle]);
return this;
};
接下来就是再绑定一个defineSetter给Function对象。
Function.prototype.defineSetter = function (p, hdle) {
return _defineSetter.apply(this,
[this].concat(Array.prototype.slice.call(arguments,0)));
};
OK!基本完成想要的功能。try it...
http://www.never-online.net/code/js/defineSetter/
当然,我们还可以加入验证~,具体的代码我就不再多写了,呵呵,已经实现了,有兴趣的朋友也试着玩一下:D。
相关文章
- js书写原生ajax,JS 原生ajax写法
- html js 全局 变量,JS定义全局变量
- 初识js中的闭包_Js闭包中变量理解
- 【说站】js使用hasOwnProperty判断属性
- 【说站】js中load事件如何理解
- js 数组去除重复数据-当WPS开始像支持VBA一样支持JS语言时,微软又该何去何从?
- js浅拷贝与深拷贝
- Js如何利用prototype为类创建静态成员属性和方法
- JS产生四位随机数的方法详解编程语言
- JS惰性载入函数与分支函数
- JS元素属性的获取和设置
- JS操作元素属性时的注意事项
- JS getComputedStyle()方法和currentStyle属性
- JS在Oracle中的应用(js如何oracle)
- JS控制表格隔行变色
- Js+DVML很酷漂亮实用的右键弹出菜单
- JS脚本混淆、加密讨论
- js鼠标点击事件及其它捕获
- js几个验证函数代码
- JS函数验证总结(方便js客户端输入验证)
- js遍历对象的属性的代码
- JS判断浏览器类型与版本的实现代码
- js正则表达式之RegExp对象属性lastIndex,lastMatch,lastParen,lastContext,rightContext属性讲解
- js去除重复字符串两种实现方法
- JS操作JSON要领详细总结
- 使用JS取得焦点(focus)元素代码
- js统计录入文本框中字符的个数并加以限制不超过多少
- 浅谈页面装载js及性能分析方法