pocket-manual
pocket-manual copied to clipboard
检测浏览器 DevTools 是否处于开启状态
个人认为比较好的方法是利用对象的 toString 方法进行检测。
其主要原理是,如果控制台输出的是对象,那么就会保留该对象的引用,每次打开控制台时都会重新调用该对象的 toString 方法并将返回结果打印到控制台。
这样,我们就可以通过自定义 toString 方法,以检测浏览器 DevTools 是否处于开启状态。
以函数为例:
let foo = () => {}
foo.toString = () => 'opening'
console.log('%s', foo) // opening
但需要注意的是,部分对象只会调用默认的 toString 方法,如 Object:
let obj = new Object()
console.log('%s', obj) // Object
自定义 toString 方法:
let obj = new Object()
obj.toString = () => 'opening'
console.log('%s', obj) // Object
如果想让其调用自定义的 toString 方法,可以使用以下方式:
let obj = new Object()
obj.toString = () => 'opening'
console.log('%s', obj + '') // opening
以上基于 Chrome 浏览器
参考:
子类应该也可以
子类应该也可以
是的,举个 :chestnut::
class SubFunction extends Function {}
let bar = new SubFunction()
bar.toString = () => 'opening'
console.log('%s', bar) // opening