2

以下代码:

function A() {
    this.method_this_outsideReturn = function() {
        console.log('method_this_outsideReturn')
    };
    return {
        method_this_insideReturn: function() {
            console.log('method_this_insideReturn')
        },
    };
}
var a = new A();
console.log(a.method_this_insideReturn()); // This would work.
console.log(a.method_this_outsideReturn()); // This wouldn't work. Warns attri_this_outsideReturn undefined

但是,在注释掉返回后:

function A() {
    this.method_this_outsideReturn = function() {
        console.log('method_this_outsideReturn')
    };
    /*return {
        method_this_insideReturn: function() {
            console.log('method_this_insideReturn')
        },        
    };*/
}
console.log(a.method_this_outsideReturn()); // This would work now

为什么会这样?return 在构造函数中做了什么?当 return 语句不存在时会发生什么?

4

4 回答 4

4

如果您的构造函数返回一个值,则返回的值将被视为创建的对象,如果您没有 return 语句,它将假定它为return this

于 2013-05-22T08:48:08.460 回答
1

因为你有回报,而不是收回和反对你收回你所返回的东西。

所以a不会是一个对象,它将是 method_this_insideReturn ,因此您将无法再从a访问您的本地方法,因为它们不存在。

我不确定您为什么要添加返回,但最好将其设为本地方法然后访问它。

   function A() {
        this.method_this_outsideReturn = function() {
            console.log('method_this_outsideReturn')
        };

        this.method_this_insideReturn: function() {
                console.log('method_this_insideReturn')
            }        

    }

console.log(a.method_this_outsideReturn());

console.log(a.method_this_insideReturn());
于 2013-05-22T08:46:21.907 回答
1

您正在使用显示模块模式,请参阅https://stackoverflow.com/a/5647397/874927。您正在将您的逻辑封装在一个函数(函数 A())中。 return在构造函数中应该只返回this。但是在您的示例中,它与构造函数无关,它与从 Javascript 中的任何函数返回值相同。

于 2013-05-22T08:46:39.817 回答
-1

每个函数/方法调用都会有一个return语句,但是如果没有明确包含它,它将return undefined

因此,在这种情况下将其注释掉不会返回任何内容。

于 2013-05-22T08:45:56.030 回答