无法访问 Javascript 对象中的变量

Can't access variable in Javascript object

不明白为什么不能通过object对象的全局函数中的bc变量访问, 在 JS 对象中的变量继承遇到了一些麻烦。

var object = {

    a: 'a',

    global: function() {
        var b = 'b';
        this.c = 'c';
    },

    render: function() {
        console.log('render()');
        return this.a + ' / ' + this.global.b + ' / ' + this.global.c;
    }

};

它呈现: a / undefined / undefined

I made a fiddle here

b是分配给全局函数的局部变量。它不是分配给 object 的对象的 属性。

c是一个属性,在调用object.global()后,设置在分配给object的对象上。它不是分配给 global.

的函数的 属性

如果你想像那样访问 bc 那么你需要将函数设为一个对象:

global: {
    b: 'b';
    c: 'c';
},

…或者使它们成为函数的属性…

global: function () {
    // The function can do something
},

// Outside the definition of object:

object.global.b = "b";
object.global.c = "c";

…或者你可以让函数return它们,然后在调用函数后访问它们:

global: function () {
    return { b: "b", c: "c" };
},

// later

this.global().b;
this.global().c;

B 是全局的局部变量,而不是它的 属性。而c被明确定义为对象的一个​​属性,不是全局的

全局是一个函数。功能 return 东西。 b 只能在函数内访问,不能从外部访问。 this.c 也是如此。 this.c != global.c

看看这个。它将解释为什么 bthis.c 是作用域 global 的私有变量:

var object = {

    a: 'a',

    global: function(which) {
        var b = 'b';
        this.c = "c";
        return {b:b, c:this.c}
        
    },

    render: function() {
        console.log('render()');
        return this.a + ' / ' + this.global().b + ' / ' + this.global().c;
    }

};

document.write(object.render())

在此示例中,全局函数现在 returns 个值。

这样试试:

var object = {
    a: 'a',
    global: {
        this.b = 'b';
        this.c = 'c';
    },
    render: function() {
        console.log('render()');
        return this.a + ' / ' + this.global.b + ' / ' + this.global.c;
    }
};

Scope 在 JavaScript 中很棘手,但是当你在函数内部用 var 声明一个变量时,它是该函数的私有变量。例如:

function getValue(){
    var x=10;
    this.x=20;
    return x;
}

getValue();// Returns 10
new getValue().x;// Returns 20

this.x是"privileged",只能通过所属的实例化对象访问。

var x 是 "private",它只能在它定义的 function/scope 中访问。