Javascript 无法在同一对象中使用此函数从另一个函数访问函数

Javascript 无法在同一对象中使用此函数从另一个函数访问函数,javascript,object,Javascript,Object,我有以下资料: $scope.option = { generateID:function(){ return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5); }, values : [ {id:this.generateId()}, {id:this.generateId()},

我有以下资料:

  $scope.option = {
        generateID:function(){
            return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
        },

        values : [
            {id:this.generateId()},
            {id:this.generateId()},
            {id:this.generateId()},
            {id:this.generateId()}
        ],
        markCorrect : function(option){

        },

        remove:function(option)
        {

            this.values = this.values.filter(function(value){return value.id!=option.id})
        }
    }

我总是得到一个
this.generateId不是一个函数
错误。我很确定我错过了一些基本的东西

最好将id生成器函数存储在单独的函数中,以便更容易引用:

 function generateId = function() {
     return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
 }
 $scope.option = {
        generateID: generateId,

        values : [
            {id: generateId()},
            {id: generateId()},
            {id: generateId()},
            {id: generateId()}
        ],
        markCorrect : function(option){

        },

        remove:function(option)
        {

            this.values = this.values.filter(function(value){return value.id!=option.id})
        }
    }

主要问题是,在声明它的过程中,您试图访问<代码> $范围>选项>代码>的属性。尝试这样做:

$scope.option = (function () {
  function generateId () {
    /* logic */
  }

  return {
    values: [
      {id: generateId()}
      // ...
    ],
    markCorrect: function () {},
    remove: function () {}
  };

}) ();

这是“显示模块模式”,即返回一个对象的函数,该对象在某些其他数据或功能上形成闭包。

存在输入错误;将
generateID
重命名为
generateID

指的是包含
id
的对象,而不是
选项
对象。您注意到这些是
数组中的对象,对吗?这些是此
引用的对象。{id:$scope.option.generateId()}也不起作用!如果要在
values
中使用全局
generateID
函数,行
generateID:generateID,
的意义是什么?@Sam可能$scope.option的消费者想要使用它的生成器函数?除此之外,我将删除generateID memberLooks干净且可恢复!正是我想要的解释!!谢谢