Я следовал узел функционального программирует учебник в here, но когда я попытался реализовать свой код для урока # 12, как следоватьлитерал объекта динамического ключа
function Spy(target, method) {
var store={};
var self=this;
var copy=target[method];
store[target[method]]=0;
console.log(store);
console.log(store[target[method]]);
target[method]=function(){
store[target[method]]+=1;
return copy.apply(this,arguments);
};
return {count:store[target[method]]};
}
var spy = Spy(console, 'error');
console.error('calling console.error');
console.error('calling console.error');
console.error('calling console.error');
console.log(spy.count);
Я получил console.log(store)
в Spy возвращает объект, содержащий функцию , Кроме того, окончательное возвращение return {count:store[target[method]]};
от возврата шпиона не определено. Может кто-нибудь объяснить причины этих двух? Благодаря
Большое спасибо за объяснение и решение :} – seanh
Просто хочу добавить отслеживание после того, как я прочитал http://stackoverflow.com/questions/9437981/why-isnt-this-object-being-passed-by-reference-when-assigning-something-else- это правда, что прохождение объекта в JS должно быть больше похоже на проход по сценарию указателя на C++, чем передача ссылки в C++, поскольку указатель может быть переопределен? – seanh
@seanh Я бы по-прежнему рассматривал его как «пропущенную ссылку», так как это то, как работает его функциональность, но реализовано немного иначе. Он передан [* "копией ссылки * * (http://stackoverflow.com/questions/13104494/does-javascript-pass-by-reference). В основном он передает значение ссылки, поэтому он реализуется как передаваемый по значению, но функциональность действует так, как если бы он был передачей по ссылке. [Значение, переданное в этом случае, является самой ссылкой) (http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language). –