上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

[油猴脚本开发指南]对象的数据劫持代码

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    633

    主题

    5173

    回帖

    6052

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6052

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2021-7-19 17:13:24 | 显示全部楼层 | 阅读模式

    这里我们利用的是Object.defineProperty

    具体可以参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

    参数有obj, prop, descriptor

    obj
    要定义对象
    prop
    要定义属性
    descriptor
    描述的爱作

    descriptor叫做属性描述符

    属性描述符通常分为两种,数据描述符以及存取描述符。

    这两种描述符公用的属性有configurable以及enumberalbe

    configurable
    当configurable为true时,属性可以被改变以及删除,默认为false
    enumerable
    当为true时,可以出现在对象的枚举对象中,默认为false

    接下来我们分别介绍数据描述符以及存取描述符

    数据描述符具有两个键值

    value和writable

    value设置该属性对应的值默认为false

    writable设置该属性是否可写,默认为false

    存取爱作符也具有两个键值

    get和set

    get
    当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。

    set
    当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。

    数据描述符更倾向于控制数据的属性以及值,

    存起描述符更倾向于控制数据变化的过程。

    具体怎么用我们可以看一些小栗子,这个函数相当于在访问对象内的属性的时候进行了一层过滤,可以篡改读取到的数据以及设置的数据

    可以看一下官方的例子有一个非常好的体现

    const object1 = {};
    创建一个object1
    Object.defineProperty(object1, 'property1', {
      value: 42,
      writable: false
    });
    设置object1的属性property1,值为42,不可写
    object1.property1 = 77;
    再设置object1的property1属性为77
    // throws an error in strict mode
    
    console.log(object1.property1);
    我们来访问property,为42
    // expected output: 42

    不仅仅可以设置为对象,也可以设置set和get来控制读取和写入

    Object.defineProperty(对象, '属性', {
        get: function() {
             获取的数据
        },
        set: function(str) {
             设置的数据
        },
    });

    相信到这里大家就了解了数据的拦截了!!

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    奋斗
    前天 08:49
  • 签到天数: 426 天

    [LV.9]以坛为家II

    148

    主题

    423

    回帖

    1141

    积分

    版主

    积分
    1141

    油中2周年生态建设者

    发表于 2021-7-19 17:36:24 | 显示全部楼层
    我想到了java
    I don't hate programming but the fucking world.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    290

    主题

    3884

    回帖

    3800

    积分

    管理员

    积分
    3800

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2021-7-19 18:24:15 | 显示全部楼层
    感觉能不能编一个目录,弄成书?不然感觉好乱啊 类似语雀那样?

    这种觉得应该算是技巧
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    633

    主题

    5173

    回帖

    6052

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6052

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2021-7-19 18:25:32 | 显示全部楼层
    王一之 发表于 2021-7-19 18:24
    感觉能不能编一个目录,弄成书?不然感觉好乱啊 类似语雀那样?

    这种觉得应该算是技巧 ...

    先这样吧,拿总目录做指引,回头有机会可以考虑做个chm或者语雀
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    19 小时前
  • 签到天数: 625 天

    [LV.9]以坛为家II

    30

    主题

    532

    回帖

    1400

    积分

    荣誉开发者

    积分
    1400

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-6-22 19:00:15 | 显示全部楼层
    ggnb
    另外想问一下Object.defineProperty(obj, prop, descriptor)中的obj能是任意对象吗?或者有办法拦截到闭包内的对象,然后暴露到全局吗?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    633

    主题

    5173

    回帖

    6052

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6052

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2022-6-23 09:13:19 | 显示全部楼层
    steven026 发表于 2022-6-22 19:00
    ggnb
    另外想问一下Object.defineProperty(obj, prop, descriptor)中的obj能是任意对象吗?或者有办法拦截到 ...

    这个也要先拿到对象才能做定义哦
    闭包的话看什么了
    vue react webpack论坛有解决方案
    其他的要哥哥自己分析了~
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表