当前位置: 首页 > news >正文

学校门户网站怎么做网站架构怎么做

学校门户网站怎么做,网站架构怎么做,做专利网站的重要点,深圳制作网站的公司哪家好请先看下面一段代码 var obj (function () {var sonObj {a: 1,b: 2}return {get: function (v) {return sonObj[v]}}})()可以看出,这是一段很典型的js闭包代码,可以通过obj调用get方法传一个参数,如果传的是a就可以得到闭包内的对象sonObj.a var obj (function () {var sonO…请先看下面一段代码 var obj (function () {var sonObj {a: 1,b: 2}return {get: function (v) {return sonObj[v]}}})()可以看出,这是一段很典型的js闭包代码,可以通过obj调用get方法传一个参数,如果传的是a就可以得到闭包内的对象sonObj.a var obj (function () {var sonObj {a: 1,b: 2}return {get: function (v) {return sonObj[v]}}})()console.log(obj.get(a))如下,正确的获取到了sonObj的属性a 这是一个典型的闭包场景,这样做的目的是为了屏蔽这个obj,不让外边直接访问它,只能读取它的某一个属性,这样就保护了数据的完整性 但这样做有一个问题 ,那就是没有处理js闭包的漏洞,给的权限太大了 用户可以通过,obj.get访问到sonObj的任何成员,包括prototype上的成员 所以我们就可以利用可以访问prototype来达到我们想要做的事 我们都知道对象上的value上的valueOf这个方法会返回对象自身 也就是说,我们能通过 obj.valueOf()来获取到这个对象,方向有了,但是这样还不够.如下 var obj (function () {var sonObj {a: 1,b: 2}return {get: function (v) {return sonObj[v]}} })() console.log(obj.get(valueOf)())如上图,报错了 Uncaught TypeError: Cannot convert undefined or null to object 无法将未定义或 null 转换为对象 为什么会出现这种问题呢? 这是因为this指向的问题 因为我们只有通过sonObj调用valueOf的时候,才能返回sonObj对象 而obj.get(‘valueOf’)()明显不是,是通过get方法获取到了valueOf这个方法本身,然后通过这个方法本身去调用的,那么这时候this的指向就变成了全局 所以这种方法是行不通了,那需要怎么办呢? 很简单,我们只需要让sonObj的某一个成员,在被读取的时候,返回它自身就好了, 如下,我们让object的原型上添加一个方法,让这个方法被访问的时候,返回它 Object.defineProperty(Object.prototype,aaa,{get(){return this} }这样,当访问aaa这个属性的时候,sonObj没有这个成员,就会去prototype上找,然后就会调用prototype上的aaa方法,然后就把自己返回出去了,闭包也就破解了 var obj (function () {var sonObj {a: 1,b: 2}return {get: function (v) {return sonObj[v]}}})()Object.defineProperty(Object.prototype,aaa,{get(){return this}})console.log(obj.get(aaa))诺,sonObj就到手了 那话又说回来了,该怎么防御呢? 简单,它不是原型上整活吗?,我们让sonObj原型指向null,欸,我没有原型了,也就不存在这种错误了 头痛?把脑袋砍了,就再也不会头痛了,简直是太妙了~ var obj (function () {var sonObj {a: 1,b: 2}Object.setPrototypeOf(sonObj,null)return {get: function (v) {return sonObj[v]}}})()Object.defineProperty(Object.prototype,aaa,{get(){return this}})console.log(obj.get(aaa))但是在实际开发中一般不这么做,因为原型树上可能有别的方法能用得上,所以我们可以在sonObj的方法内加个判断,如果是对象上的成员就让他正常返回,如果不是就返回undefinded, var obj (function () {var sonObj {a: 1,b: 2}return {get: function (v) {if(obj.hasOwnProperty(v))return sonObj[v]return undefined}}})()Object.defineProperty(Object.prototype,aaa,{get(){return this}})console.log(obj.get(aaa))不过这样写其实又出现了新的问题,关于直接手写undefined的问题,但是这里就不展开说了
http://www.zqtcl.cn/news/108997/

相关文章:

  • 站长素材音效下载重庆市建设工程信息网综合网
  • 网络营销专业就业方向wordpress插件dx-seo
  • 义乌有什么企业网站吗大良企业网站建设
  • 外链网站推荐几个html5标准网站建设
  • 博星卓越营销网站设计古镇镇建网站公司
  • 3. 是网站建设的重点网站后台添加关键词
  • 免费手机网站模板下载百度网站建设北京
  • 爱用建站建设网站的报告
  • 网站关键字被百度收录网站开发asp.net
  • 内部卷网站怎么做的h5在线编辑器
  • 搞定设计网站做的图怎么下载不了网站死链接怎么删除
  • 济南企业建站怎么样在pc端预览手机网站
  • c 手机网站开发模板最好的建站网站
  • 防城港市网站建设成功网站建设案例
  • 成都公司网站制作公司实验一 电子商务网站建设与维护
  • 即墨区城乡建设局网站300m空间够用吗 wordpress
  • 成都软件开发培训机构7个湖北seo网站推广策略
  • 嘉定企业网站建设深圳网站制作费用
  • 外贸网站有必要吗wordpress远程保存图片
  • 苏州吴中网站建设wordpress中文版安装教程
  • wordpress 网站静态页面赶集网网站建设分析
  • 伊春网站开发大型网站建设兴田德润专业
  • 温州平阳县营销型网站建设榆林做网站
  • 沽源网站建设娄底网站建设工作室
  • 商场网站 策划医疗网站是否全部需要前置备案
  • 电商网站开发实训心得wordpress网络验证
  • 美图网seo 优化技术难度大吗
  • 知名的传媒行业网站开发天空网站开发者
  • 网站域名年费多少钱二手手表交易平台哪个好
  • 用易语言做抢购网站软件下载自己可以做企业网站吗