以下代码:
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语句不存在时会发生什么?
答案 0 :(得分:4)
如果构造函数返回一个值,则返回的值将被视为创建的对象,如果您没有return语句,则将其视为return this
答案 1 :(得分: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());
答案 2 :(得分:1)
您正在使用揭示模块模式,请参阅https://stackoverflow.com/a/5647397/874927。您将逻辑封装在函数内(函数A())。 consturctor中的return
应该返回this
。但是在您的示例中,它与构造函数无关,它与从Javascript中的任何函数返回值相同。
答案 3 :(得分:-1)
每个函数/方法调用都会有一个return
语句,但如果没有明确包含它,它将return undefined
因此,在这种情况下对其进行评论将不会返回任何内容。