Javascript中的getter和setter初识
程序员文章站
2022-09-08 20:38:01
前言
本文主要给大家介绍的关于javascript中getter和setter的相关内容,第一次听说这个东西的时候是vue.js里面的数据绑定,只要绑定了数据,修改对象属...
前言
本文主要给大家介绍的关于javascript中getter和setter的相关内容,第一次听说这个东西的时候是vue.js里面的数据绑定,只要绑定了数据,修改对象属性可以自动反馈到dom上,很神奇,后面也看到了文档里面实现是对对象定义了getter和setter并覆盖原属性,索性就来总结这两者的用法,下面话不多说了,来一起看看详细的介绍吧。
原理
利用object.defineproperty来重写对象属性为getter和setter,通过getter和setter顺便改变绑定dom节点的值
例子
摘自mdn
function archiver() { var temperature = null; var archive = []; object.defineproperty(this, 'temperature', { get: function() { console.log('get!'); return temperature; }, set: function(value) { temperature = value; archive.push({ val: temperature }); } }); this.getarchive = function() { return archive; }; } var arc = new archiver(); arc.temperature; // 'get!' arc.temperature = 11; arc.temperature = 13; arc.getarchive(); // [{ val: 11 }, { val: 13 }]
利用这个mdn例子小小的写了个方法并写了个计时器的demo
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>document</title> </head> <body> <h1 id="testtime" z:bind="time">0s</h1> <script> // 双向绑定 function bind_data(ele, arg){ var bindattributename = 'z:bind'; var data = json.parse(json.stringify(arg)) || {}; object.keys(arg).foreach(function(argkey, index, array){ object.defineproperty(arg, argkey, { get: function(){ return data[argkey]; }, set: function(value){ if(ele.getattribute(bindattributename) !== argkey) { return; } if(ele.tagname === 'input'){ ele.value = value; }else{ ele.innerhtml = value; } data[argkey] = value; } }); arg[argkey] = arg[argkey]; }); var key = ele.getattribute(bindattributename); if((ele.tagname === 'input' || ele.tagname === 'textarea') && arg[key]){ ele.addeventlistener('input', function(e){ data[key] = ele.value; }); } } /* 例子很简单,直接改变对象属性,就直接 反馈到了dom上,就好像是一个钩子,改变 这个对象的属性,这个属性的钩子把它绑 定的dom的数据进行修改 */ var start = (new date()).gettime(); var now; var b = {time: '0s'}; bind_data(document.getelementbyid('testtime'), b); setinterval(function(){ var now = (new date()).gettime(); b.time = ((now - start)/1000) + 's' }, 1); </script> </body> </html>
参考
object.defineproperty() - javascript | mdn
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
推荐阅读
-
myeclipse中怎么自动生成getter和setter?
-
浅谈JavaScript中的apply/call/bind和this的使用
-
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
-
深入理解JavaScript 中的执行上下文和执行栈
-
JavaScript中undefined和null的区别
-
JavaScript中的call和apply的用途以及区别
-
有关JavaScript中call()和apply() 的一些理解
-
详解JavaScript中的事件流和事件处理程序
-
浅析javaScript中的浅拷贝和深拷贝
-
JavaScript实现向select下拉框中添加和删除元素的方法