美文网首页
js内置函数的改写问题

js内置函数的改写问题

作者: 写代码的女孩最可爱 | 来源:发表于2018-12-21 14:59 被阅读0次

点这里先看看什么是js内置函数?

简单点说内置函数就是浏览器内核自带的函数,访问他的constructor属性时可以看到‘[ native code ]’ 字样的函数,举个例子在控制台打出:

alert.constructor
ƒ Function() { [native code] }

那么是不是只要函数的constructor属性包含native code字符串就表示函数没有被篡改过呢?
不是的,改写过后函数的constructor里面可以包含特征字符串
举个栗子:

console.log.constructor
ƒ Function() { [native code] }
Function.prototype.toString = function (){return 'function' + this.name + '() {       [native code] }'}
ƒ () {       [native code] }
console.log.constructor
ƒ Function() {       [native code] }
console.log('miao')
miao
console.log = function(){alert('miao')}
ƒ () {       [native code] }
console.log('jiujiu')
//页面上弹出框并显示‘miao’

常规的改写方式

var _alert = alert;
alert = function(a){
console.log('来了一次');
return _alert(a)
}

本身没有prototype的函数在改写之后就会有prototype属性,所以可以通过访问内置函数的prototype属性来判断函数是否被改写

alert.prototype 
undefined
var a = alert;
alert = function(y){
console.log('hdfjk');
return a(y);
};
alert.prototype 
{constructor: ƒ}

总结

要看(本身没有prototype的)函数是否被改写,可以通过查看其是否有prototyp;要看(本身有prototype的)函数是否被改写,可以直接将函数打出来比对正常值

相关文章

  • js内置函数的改写问题

    点这里先看看什么是js内置函数? 简单点说内置函数就是浏览器内核自带的函数,访问他的constructor属性时可...

  • 面向对象/内置构造函数

    内置构造函数创建对象 JS中的内置构造函数 String Number Boolean 注意:(区别于string...

  • JS 内置对象 内置函数

    当js做小数运算时存在bug,大概是因为二进制和十进制转换之间的关系。 bug如图 解决方案 1.加减法可以用参数...

  • 关于PHP内置函数的bug

    最近写php的一些项目,总是被内置函数坑害,debug到最后,发现是内置函数的问题。这里简单记录一些内置函数问题的...

  • JS基础篇(四)-内置函数

    内置函数 JS的内置函数有很多,这里举例日期和数组 日期 在项目里常用到 处理时间 时间之间的加减 moment....

  • js内置编码函数

    escape() 定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。 ...

  • 6.JavaScript中

    JS对象创建: JS通过构造函数创建对象: JS内置对象window: 所有的全局变量都是window的属性 所有...

  • JavaScript-总结篇之变量类型

    JS中使用typeof能得到哪些类型? 何时使用===何时使用==? JS中有哪些内置函数? JS变量按照存储方式...

  • JS 数组的内置函数

    Array 的内置函数:find、findIndex、slice、join、indexOf、includes、is...

  • JS Date的内置函数

    Date 的常用内置函数 获取日期 获取时间 将日期格式字符串转换成时间戳 设置日期和时间

网友评论

      本文标题:js内置函数的改写问题

      本文链接:https://www.haomeiwen.com/subject/lammkqtx.html