Javascript 使用此返回的TypeError调用对象文字函数
我有一个范围问题。我有一个简单的object literal函数,有许多方法。我正在尝试从method1()调用method4() 我已经尝试了很多方法来解决这个问题: 尝试一:Javascript 使用此返回的TypeError调用对象文字函数,javascript,this,javascript-objects,Javascript,This,Javascript Objects,我有一个范围问题。我有一个简单的object literal函数,有许多方法。我正在尝试从method1()调用method4() 我已经尝试了很多方法来解决这个问题: 尝试一: var myObjectFunc = function() { var that = this; return { method1: function() { // call method4 here and pass value var myName = 'Peter';
var myObjectFunc = function() {
var that = this;
return {
method1: function() {
// call method4 here and pass value
var myName = 'Peter';
that.method4(myName);
},
method2: function() {
},
method3: function() {
},
method4: function(val) {
console.log(val);
}
}
}
尝试二:
var myObjectFunc = function() {
return {
method1: function() {
// call method4 here and pass value
var myName = 'Peter';
this.method4(myName);
},
method2: function() {
},
method3: function() {
},
method4: function(val) {
console.log(val);
}
}
}
两者都返回错误:
TypeError: that.method4 is not a function
试试这个:
var myObjectFunc = function() {
var ret = {
method1: function() {
// call method4 here and pass value
var myName = 'Peter';
ret.method4(myName);
},
method2: function() {
},
method3: function() {
},
method4: function(val) {
console.log(val);
}
}
return ret;
}
试试这个:
const myObjectFunc = () => ({
method1() {
// call method4 here and pass value
const myName = 'Peter'
this.method4(myName)
},
method2() {
},
method3() {
},
method4(val) {
console.log(val)
}
})
然后:
日志
'Peter'
您的第二次尝试似乎有效myObjectFunc().method1()
给出了'Peter'
。您是如何调用method1()
的?谢谢,这似乎有效。尽管这样写文字是正确的吗?我正在努力学习最佳实践如果你想让对象能够访问它自己,这是一个很好的方法。此
运算符仅在函数中可用,而在对象中不可用。@ThorJacobsen这不是真的。例如:({a:function(){console.log(this)}).a()
返回对象。@ThorJacobsen,如果您需要这些方法始终引用thisref
,并且您知道您将把它们分配给另一个对象,或者将它们作为回调函数传递。那么,这就是要走的路。(方法有点绑定到ref)在任何其他情况下,您都有选择,有特定的优点和缺点。
const myObjectFunc = () => ({
method1() {
// call method4 here and pass value
const myName = 'Peter'
this.method4(myName)
},
method2() {
},
method3() {
},
method4(val) {
console.log(val)
}
})
myObjectFunc().method1()