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() {
プロトタイプメソッドを再宣言します
return _old.apply(this, arguments); // Make sure to call the old method without anyone noticing
古いメソッドを呼び出し、その結果を返します。
this
apply を使用すると、関数に渡されたすべての引数を正しいスコープ ( ) に入れることができます
。簡単な関数を作って適用すると。
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