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

时间:2015-11-28 01:58:35

标签: 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()},
            {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 is not a function错误。我很确定我在这里缺少一些基本的东西!

3 个答案:

答案 0 :(得分:0)

将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})
        }
    }

答案 1 :(得分:0)

主要问题是您在声明它的过程中尝试访问$scope.option的属性。尝试做这样的事情:

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

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

}) ();

这是'揭示模块模式',即返回一个对象形成一些其他数据或功能的闭包的函数。

答案 2 :(得分:0)

有一个错字;将generateID重命名为generateId