JavaScript OOPS问题
作者:互联网
这是一个JavaScript新手.我有以下代码:
function testObject(elem) {
this.test = "hi";
this.val = elem;
console.log(this.test+this.val);
echo();
function echo () {
console.log(this.test+this.val);
}
}
var obj = new testObject("hello");
当它运行时,我希望在控制台中输出两次“hihello”.相反,它第一次按预期输出,但第二次返回NaN.
我确定我在这里遗漏了一些东西.我认为内部函数可以访问外部的变量.有人可以指导我吗?我是一名功能性UI开发人员,对OO代码没有多少经验.
谢谢!
解决方法:
问题是内部回显这个值指向全局对象,而this.test和this.val(指向window.test和window.val)是未定义的.
你可以通过调用它来设置echo的这个值,如:
echo.call(this);
这是因为您通过echo();调用该函数,然后将此值隐式设置为全局对象.
查看this question以了解此值的工作原理.
编辑:因为只能调用echo();你应该从外部函数上下文中保留这个值,有很多方法可以做到,例如:
//...
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();
//...
标签:javascript,scope,closures,instance-variables 来源: https://codeday.me/bug/20190726/1545653.html