Проблема в том, что внутри echo
значение this
указывает на глобальный объект, а this.test
и this.val
(которые относятся к window.test
и window.val
) равны undefined
.
Вы можете установить this
значение эха, вызвав его следующим образом:
echo.call(this);
Это происходит потому, что вы вызывали функцию с помощью echo();
, тогда значение this
неявно устанавливается для глобального объекта.
Посмотрите на этот вопрос , чтобы узнать, как работает значение this
.
Редактировать: Чтобы иметь возможность вызывать просто echo();
, вы должны сохранить значение this
из внешнего контекста функции, есть много способов сделать это, например:
//...
var instance = this; // save the outer `this` value
function echo (){
console.log(instance.test+instance.val); // use it
}
echo();
//...
Или
//...
var echo = (function (instance) {
return function () {
console.log(instance.test+instance.val);
};
})(this); // pass the outer `this` value
echo();
//...