gpt4 book ai didi

javascript - 我如何访问这个 Javascript 属性?

转载 作者:行者123 更新时间:2023-11-28 20:46:11 26 4
gpt4 key购买 nike

我需要确保调用了下面显示的 UserMock 类中的某个方法。我创建了这个模拟版本来注入(inject)另一个模块,以防止测试期间的默认行为。

我已经在使用 sinon.js,那么如何访问 isValid() 等方法并将其替换为 spy / stub ?是否可以在不实例化类的情况下执行此操作?

var UserMock = (function() {
var User;
User = function() {};
User.prototype.isValid = function() {};
return User;
})();

谢谢

最佳答案

var UserMock = (function() {
var User;
User = function() {};
User.prototype.isValid = function() {};
return User;
})();
<小时/>

只需通过原型(prototype):

(function(_old) {
UserMock.prototype.isValid = function() {
// my spy stuff
return _old.apply(this, arguments); // Make sure to call the old method without anyone noticing
}
})(UserMock.prototype.isValid);
<小时/>

说明:

(function(_old) {

})(UserMock.prototype.isValid);

将方法 isValue 引用到变量 _old。进行闭包是为了避免我们使用变量来插入父作用域。

UserMock.prototype.isValid = function() {

重新声明原型(prototype)方法

return _old.apply(this, arguments); // Make sure to call the old method without anyone noticing 

调用旧方法并返回结果。

使用 apply 让我们将所有参数放入正确的范围 (this) 中,并将所有参数传递给函数
例如。如果我们创建一个简单的函数并应用它。

function a(a, b, c) {
console.log(this, a, b, c);
}

//a.apply(scope, args[]);
a.apply({a: 1}, [1, 2, 3]);

a(); // {a: 1}, 1, 2, 3

关于javascript - 我如何访问这个 Javascript 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383345/

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