关闭

【JavaScript 高级技巧】防篡改对象+高级定时器

标签: javascript
907人阅读 评论(0) 收藏 举报
分类:

因为任何对象都可以被在同一环境中运行的代码修改,开发人员很可能会意外的修改别人的代码,甚至会用不兼容的功能重写原生对象。而防篡改对象就是一个可以解决这个问题的方法。

一、防篡改对象

1、不可扩展对象

Object.preventExtensions( ):不能给对象添加新属性和方法了;
Object.isExtensible( ):确定对象是否可扩展
        虽然不能给对象加新成员,但是已有的成员不受影响,仍然可以修改和删除已有的成员。

2、密封的对象

Object.seal( ):将对象设置为密封对象,密封对象不可扩展,也不能删除已有属性和方法,但属性可修改
Object.isSealed( ):确定对象是否被密封了。

3、冻结的对象

Object.freeze( ):将对象设置为冻结对象,冻结对象不可扩展,也是密封的,而且对象属性不可修改
Object.isFrozen( ):去顶对象是否被冻结了。

二、高级定时器

关于定时器,一个很重要的问题是:指定的时间间隔表示何时将定时器的代码添加到队列,而不是何时执行代码。

先说一下setTimeout( )和setInterval( ):
使用SetInterval和设定延时函数setTimeout 很类似。setTimeout 运用在延迟一段时间,再进行某项操作;setInterval可以使一段代码每过指定时间就运行一次。
setTimeout(“function”,time) :返回一个ID,可以用作清除此计时器。
setInterval(“function”,time) :返回一个ID,作为clearInterval()的参数。
SetInterval为自动重复,setTimeout不会重复。

1、重复的定时器

setInterval()有两个问题:
(1)某些间隔会被跳过;
(2)多个定时器的代码执行之间的间隔可能会比预期的小。
解决办法:
链式调用setTimeout(),每次函数执行的时候都创建一个新的定时器,这样在前一个定时器代码执行完之前,不会向队列插入新的定时器代码,确保不会有任何确实的间隔。

setTimeout(function(){
    //code
    setTimeout(arguments.callee,interval)
},interval)

2、数组分块

脚本长时间运行的问题通常是由以下原因造成:
(1)过长的/过深嵌套的函数调用
(2)进行大量处理的循环
如果 处理不需要同步完成,而数据也不需要顺序完成,那么就可以使用数组分块的方法,用计时器来分隔循环。

数组分块的基本思路:
为要处理的项目创建一个队列,然后使用定时器取出下一个要处理的项目进行处理,接着再设置另一个定时器。

function arrayChunk (array,process,context,delay) {
    if(delay) {
        interval = delay;
    } else {
        interval = 100;
    }
    setTimeout(function () {
        var item = array.shift();//取出下一个条目
        process.call(context,item);//处理下一个条目

        if (array.length > 0) {//若还有条目,则设置另一个定时器
            setTimeout(arguments.callee,interval);
        }
    },interval);
}
var data = ["Hello","I","am","vickygu",",","I","am","so","glad","today"];
    function printValue (item) {
        var arrayDiv = document.getElementById("arrayDiv");
        arrayDiv.innerHTML += item + " ";
    }
    arrayChunk(data,printValue,null,200);

这样每隔200ms 就会打印出一个单词。

3、函数节流

上一篇博客

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

JavaScript-前端加密(广义),防止js篡改

好久没有写博客了,不是没有在学习新东西,是最近比较忙,没有总结。 今天聊的话题是防止js篡改。javascript代码和需要编译的代码有一点不同是,网页上会直接请求js文件源码,而编译的语言运行时使...
  • qiqingjin
  • qiqingjin
  • 2016-09-16 13:53
  • 8753

App安全(一) Android防止升级过程被劫持和换包

文/ Tamic 地址/ http://blog.csdn.net/sk719887916/article/details/52233112 前言APP 安全一直是开发者头痛的事情,越来越多的...
  • sk719887916
  • sk719887916
  • 2016-08-17 17:46
  • 7522

如何解决谷歌浏览器在安装流氓软件之后被篡改主页的问题

很多人可能没有遇到过流氓,但是流氓软件倒是见了不少,最常见的就是浏览器主页被劫持,我已经遇见好几次了,大部分都是因为自己的下载习惯不好导致的,也有一些是你猝不及防的就被劫持了。不论原因是什么,被劫持的...
  • ls1792304830
  • ls1792304830
  • 2017-03-21 21:20
  • 3012

RSA加密 - 数据传输过程中的加密和防篡改

加密的数据太长怎么办?RSA的最大加密长度是多少?
  • u014290054
  • u014290054
  • 2015-12-04 13:09
  • 2158

JavaScript 高级技巧——“防篡改对象”的注意要点

防篡改对象 不可扩展对象 默认情况下,所有对象都是可扩展的: var person = { name: "Oliver" }; person.age = 18; consol...
  • alex8046
  • alex8046
  • 2016-07-14 17:13
  • 176

JavaScript之防篡改对象(高级技巧)

在实际开发中,有时会无意地修改了别人的代码,或者用不兼容的功能重写原生对象,这样会给整个开发带来困扰。
  • h15882065951
  • h15882065951
  • 2017-05-15 22:14
  • 292

javascript防篡改对象

javascript防篡改对象这个东西吧,用到的很少,个人感觉用处不大,但是,可以作为装逼的利器,哈哈,开搞。。1、不可扩展对象默认情况下对象都是可以扩展的,也就是说,任何时候都可以向对象中添加属性和...
  • jackwen110200
  • jackwen110200
  • 2016-06-08 12:42
  • 263

JavaScript 防篡改对象

一、为什么需要引入防篡改对象? 1.为什么?JavaScript 共享的本质一直是开发人员心头的痛,因为任何对象都可以被在同一环境中运行的代码修改。 2.解决:我们可以手工设置每个对象...
  • super_yang_android
  • super_yang_android
  • 2016-04-05 21:26
  • 153

深入理解javascript之防篡改对象

javascript中对象内置有多个属性Configurable,Writable,Enumerable,Value,Get和Set,来控制属性的行为。同样的ES5也有几个方法,来指定对象的行为。我们...
  • mevicky
  • mevicky
  • 2015-08-05 09:00
  • 1007

深入理解javascript之高级定时器

setTimeout()和setInterval()可以用来创建定时器,其基本的用法这里就不再做介绍了。这里主要介绍一下javascript的代码队列。在javascript中没有任何代码是立即执行的...
  • mevicky
  • mevicky
  • 2015-12-29 15:52
  • 2222
    个人资料
    • 访问:309167次
    • 积分:3727
    • 等级:
    • 排名:第10037名
    • 原创:102篇
    • 转载:5篇
    • 译文:1篇
    • 评论:142条
    最新评论