在JS中, 有两种设置定时器的方案
// 语法规则
t = setTimeout(函数, 时间)
// 经过xxx时间后, 执行xxx函数
// 示例:3秒后打印我爱你
t = setTimeout(function () {
console.log("我爱你")
}, 3000);
window.clearTimeout(t) // 停止一个定时器
eval本身在js里面正常情况下使用的并不多. 但是很多网站会利用eval的特性来完成反爬操作. 我们来看看eval是个什么鬼?
从功能上讲, eval非常简单. 它和python里面的eval是一样的. 它可以动态的把字符串当成js代码进行运行.
s = "console.log('我爱你')";
eval(s);
也就是说. eval里面传递的应该是即将要执行的代码(字符串). 那么在页面中如果看到了eval加密该如何是好? 其实只要记住了一个事儿. 它里面不论多复杂. 一定是个字符串.
比如,
这一坨看起来, 肯定很不爽. 怎么变成我们看着很舒服的样子呢? 记住. eval()里面是字符串. 记住~!!
那我想看看这个字符串长什么样? 就把eval()里面的东西拷贝出来. 执行一下. 最终一定会得到一个字符串. 要不然eval()执行不了的. 对不...于是就有了下面的操作.
http://tools.jb51.net/password/evalencode, 再赠送你一个在线JS处理eval的网站. 大多数的eval加密. 都可以搞定了。
prototype和__proto__
逆向代码示例:
示例:
我现在代码写完了. 突然之间, 我感觉好像少了个功能. 人不应该就一个功能. 光会跑是不够的. 还得能够学习. 怎么办? 直接改代码? 可以. 但不够好. 如果这个代码封装不是我写的呢? 随便改别人代码是很不礼貌的. 也很容易出错. 怎么办? 我们可以在我们自己代码中对某个类型动态增加功能. 此时就用到了prototype.
能看到一些效果了是吧. 也就是说. 可以通过prototype给我们的对象增加一些功能. 那么,什么是prototype呢?
接下来. 聊几个重要的概念.
每一个js对象中. 都有一个隐藏属性__proto__指向该对象的原型对象. (People.prototype)
原型对象用于存储所有实例对象共享的属性和方法,以减少每个实例对象重复存储相同属性和方法的开销。
在执行该对象的方法或者查找属性时. 首先, 对象自己是否存在该属性或者方法. 如果存在, 就执行自己的. 如果自己不存在. 就去找原型对象.
实例对象是可以共享它的原型链上所有的原型对象存在的成员
对象的原型成员重写:
2. prototype和__proto__有什么关系?
在js中. 函数名的prototype属性和对象的__proto__是一个东西. 都是指向这个原型对象.
原型链是JavaScript中对象继承属性和方法的一种方式。具体介绍如下:
这个比较绕了. 我们从前面的学习中, 了解到. 每个对象身体里. 都隐藏着__proto__也就是它的原型对象. 那么我们看哈, 原型对象也是对象啊, 那么也就是说. 原型对象也有__proto__属性.
类似于.....这样:
此时. 又出现一堆看不懂的玩意. 这些玩意是什么? 这些其实是Object的原型.
练习测试:理解下属代码
重点总结:
对象在调用某一个成员时,该成员有可能是对象自身封装的成员也可能是该对象原型上的成员
Last updated