编程语言
首页 > 编程语言> > JavaScript OOPS问题

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