Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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 使用此返回的TypeError调用对象文字函数_Javascript_This_Javascript Objects - Fatal编程技术网

Javascript 使用此返回的TypeError调用对象文字函数

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';

我有一个范围问题。我有一个简单的object literal函数,有许多方法。我正在尝试从method1()调用method4()

我已经尝试了很多方法来解决这个问题:

尝试一:

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,如果您需要这些方法始终引用this
ref
,并且您知道您将把它们分配给另一个对象,或者将它们作为回调函数传递。那么,这就是要走的路。(方法有点绑定到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()