gpt4 book ai didi

javascript - 是否可以修改定义的 getter 函数?

转载 作者:行者123 更新时间:2023-12-03 03:34:54 25 4
gpt4 key购买 nike

在微信小程序平台上开发一个性能审核工具(基于微信小程序的javascript + 原生混合),我尝试将代码注入(inject)到其原型(prototype)中,例如wx.request功能。

这就是使用 wx.request 的方式功能:

wx.request({
url: 'test.php',
data: {
x: '' ,
y: ''
},
header: {
'content-type': 'application/json'
},
success: function(res) {
console.log(res.data)
}
})

因此,为了知道请求在不手动编写添加所有 anchor 的情况下花费了多长时间,我尝试通过以下方式注入(inject)代码:

var owxrequest = wx.request
wx.request = function() {
console.log('test', Date.now())
return owxrequest.apply(owxrequest, arguments)
}

失败了,我得到了 Cannot set property "prop" of #<Object> which has only a getter错误。

所以我意识到该对象的定义必须类似于:

wx = {
request: get function(){
...
}
...
}

所以我尝试了:

var owxrequest = wx.request
Object.defineProperty(wx, 'request', {
get: function() {
console.log('test', Date.now())
return owxrequest.apply(owxrequest, arguments)
}
})

此操作失败并出现错误 ( request: fail parameter error: parameter.url should be String instead of Undefined )。然后我尝试了:

var owxrequest = wx.request
Object.defineProperty(wx, 'request', {
set: function() {
console.log('test', Date.now())
return owxrequest.apply(owxrequest, arguments)
}
})

这不会引发错误,但在调用 wx.request() 时也没有效果。 ...

最佳答案

您可以通过重新定义 getter 来实现这一点。重点是:重新定义的 getter 应该返回一个函数对象,因为 wx.request 是一个函数:

Object.defineProperty(wx, 'request', {
get: function() {
return function() {
//...
};
}
});

为什么我收到错误:请求:失败参数错误:parameter.url 应该是 String 而不是 Undefined

您正在尝试访问 getter 本身的参数(get: function(){...} 中函数的参数 >)。这个arguments是一个空对象,可以通过console.log()语句进行验证。由于它是空的,所以 arguments.url 未定义,这就是 wx 提示该参数的原因。

这是一个工作示例:

let wx = {
get request(){
return function() {
console.log(10);
return 88;
};
}
};

let oldF = wx.request;

Object.defineProperty(wx, 'request', {
get: function() {
return function() {
console.log(new Date());
return oldF.apply(wx, arguments);
};
}
});

console.log(wx.request());

上面的代码将打印:

2017-08-28T06:14:15.583Z // timestamp
10
88

关于javascript - 是否可以修改定义的 getter 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45912414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com