Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从成员函数访问函数成员变量_Javascript_Closures_This - Fatal编程技术网

Javascript 从成员函数访问函数成员变量

Javascript 从成员函数访问函数成员变量,javascript,closures,this,Javascript,Closures,This,Foo是一个具有名为list的公共成员的函数。它有一个名为setList的公共成员函数。我希望能够从setList编辑列表。我可以这样做吗?我尝试了一些方法,但我甚至无法从setList内部访问列表 var Foo = function Foo() { this.list = ["a", "b", "c"]; this.setList = function(data) { // Attempt 1 console.log(list); // U

Foo是一个具有名为list的公共成员的函数。它有一个名为setList的公共成员函数。我希望能够从setList编辑列表。我可以这样做吗?我尝试了一些方法,但我甚至无法从setList内部访问列表

var Foo = function Foo() {

    this.list = ["a", "b", "c"];

    this.setList = function(data) {
        // Attempt 1
        console.log(list); // Uncaught ReferenceError: list is not defined
        // Attempt 2 
        console.log(this.list); // undefined
        // Attempt 3
        console.log(Foo.list); // undefined
    }
}

我还在想JS,所以如果我用错误的名称调用了某些东西,请原谅。

假设您正在使用
Foo
创建实例:

function Foo()
{
    this.list = ["a", "b", "c"];

    this.setList = function(data) {
        this.list = data;
    }
}

var x = new Foo();
console.log(x.list); // a,b,c
x.setList([]);
console.log(x.list); // empty array

您还可以设置一个原型,该原型将产生相同的结果。我可以解释为什么有时您可能想要使用原型,但此链接提供了有关该主题的良好信息


这将记录传递到x.setList的数组,x.setList是['hello','hi'],显示列表已更新。

您如何调用此代码?另外,为什么要使用命名闭包作为构造函数?
this
的值取决于函数的调用方式。如果不知道您如何调用
setList
,我们就不可能正确地帮助您。假设您在其他方面都做对了,
此.list
应该可以工作。也许你可以看看。
function Foo(){
  this.list = [1,2,3];
}

Foo.prototype = {
  setList: function(data){
    this.list = data;
  }
};

var x = new Foo();
x.setList(['hello', 'hi']);
console.log(x.list);