Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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 - Fatal编程技术网

JavaScript函数访问对象属性

JavaScript函数访问对象属性,javascript,Javascript,一些愚蠢的问题,但是。。为什么以下代码只返回空字符串: var a = { name:"321", foo: function(){ console.log(name); } } a.foo(); 因为您没有将名称的作用域限定为任何对象,所以它正在寻找一个全局变量。 试着替换 console.log(name); 与 您可以像这样使用this关键字-console.log(this.name)。在代码的结果中,您会看到一个空字符串,而不是一个未定

一些愚蠢的问题,但是。。为什么以下代码只返回空字符串:

var a = {
     name:"321",
     foo: function(){
        console.log(name);
    }
}

a.foo();

因为您没有将名称的作用域限定为任何对象,所以它正在寻找一个全局变量。 试着替换

console.log(name);


您可以像这样使用
this
关键字-
console.log(this.name)。在代码的结果中,您会看到一个空字符串,而不是一个未定义的错误,因为
窗口。name
变量已经存在,并且与对象中的name变量没有任何关系

foo表示对象的函数作用域示例,bar表示回调的作用域

代码:


console.log(this.name)检查浏览器的控制台。它不应该打印任何内容。将
name
更改为
this.name
,您将看到
321
已打印@诺亚,实际上它会打印一些东西。空字符串!请参阅Good catch@patrick roberts,我知道“this.name”是有效的。我只是想知道为什么函数不能访问“name”属性。@user2598794,因为如果没有
this
,代码将搜索一个名为
name
的作用域变量,并且同一对象的另一个属性不在作用域内。如果您有一个全局变量
名称
,您会看到它的值。@DrakaSAN为什么对象中的“name”不在范围内考虑?它从哪里开始搜索?@user2598794在您的示例中,它从
a.foo
中开始,然后在全局代码中继续。我不知道为什么JS会这样做,尽管.JS是基于函数及其闭包构建的。关联的对象可以很容易地更改,单个函数可以位于多个对象中。我只注释了“1”名称,它会打印出“名称:3”。如果我注释了“1”和“3”,它会打印空字符串。看起来它根本看不到函数作用域。@user2598794:啊,是的,我忘了在这种情况下,它会跳转到全局作用域,而不是回调。我编辑了我的示例。
console.log(this.name);
var foo = "global",
    bar = "global",
    a = {
    foo: (callback) => {
        // var foo = 'local';
        console.log('foo: ' + foo);
        callback();
    }
};

(() => {
    // var bar = "parent";
    a.foo(() => {
        // var bar = "local";
        console.log('bar: ' + bar);
    });
})();