javascript:通过原型向方法添加行为-渗透代码
我们有以下情况,我们使用一个库来加密东西,我想知道我们是否可以在加密之前更改参数。我可以轻松做到这一点:javascript:通过原型向方法添加行为-渗透代码,javascript,methods,interceptor,control-flow,modifier,Javascript,Methods,Interceptor,Control Flow,Modifier,我们有以下情况,我们使用一个库来加密东西,我想知道我们是否可以在加密之前更改参数。我可以轻松做到这一点: MyEncoder.prototype.encode=(值)=>{//按我想要的方式更改它} 但是,在我改变它之前,我该怎么做才能让它像以前一样呢?(我知道!!!) 这不起作用:var encoder=MyEncoder.prototype.encode因为它只复制方法,所以它不会有这个,而且,您知道 如果我能调试encode方法。那会有帮助的 编写一个立即调用的函数表达式(IIFE),它1
MyEncoder.prototype.encode=(值)=>{//按我想要的方式更改它}代码>
但是,在我改变它之前,我该怎么做才能让它像以前一样呢?(我知道!!!)
这不起作用:var encoder=MyEncoder.prototype.encode
因为它只复制方法,所以它不会有这个,而且,您知道
如果我能调试encode
方法。那会有帮助的 编写一个立即调用的函数表达式(IIFE),它1-stly在它创建的闭包中保留原始原型encode
功能,2-ndly返回您自己的encode
实现,该实现现在控制传递的参数和原始encode
的返回值。因此,我们在方法修饰符附近写了一种
MyEncoder.prototype.encode=(函数/*create_-ound_-modifier*/(proto_-encode){
返回函数/*修改的_encode*/(…argsArray){
//-拦截数据流。。。
//…例如,查看或更改传递的参数。
//…执行**之前的**部分。
//-调用/调用原始编码。。。
//
//调用原始“encode”后返回值。
const result=proto_encode.apply(这是argsArray);
//-拦截数据流。。。
//…例如,查看、处理或更改结果。
//…执行**后**部分。
//
//-不要忘记返回值。
};
}(MyEncoder.prototype.encode));
实际示例,比:
JSON.stringify = (function (proto_method) {
return function (...args) {
//I can to whatever I want before original method does it's job
return proto_method.apply(this, args);
};
}(JSON.stringify));
这样我就可以很容易地更改一个参数,也许可以检查加密之前做了什么,因为JSON主要用于处理这种场景
谢谢大家。试试这个MyEncoder.prototype.original\u encode=MyEncoder.prototype.encode
不要对方法使用箭头函数!使用真正的函数
,其中this
可用,您可以.call()
使用正确的this参数调用原始方法。。。。至于OP的根本问题是方法修改。。。有一天,除了Function.prototype.bind
之外,还应该有对Function.prototype[before | after | around | afterhrough | afterFinally]等方法修饰符的原生支持
,为此类任务提供防弹的抽象级别。。。。嗯,差不多了。由于stringify
是一个固定在JSON
命名空间上的静态方法,因此它的实现不依赖于/中继任何绑定的此
上下文。至于你的例子,.apply(null,args)
也一样好。这就是我觉得奇怪的地方。我想我可能需要一些时间来研究JS lol中的名称空间。谢谢