如何在对象中调用方法

时间:2015-03-19 12:09:53

标签: javascript object

我正在尝试在对象中创建一个属性,我希望该值是从同一函数中的方法返回的值:

var model = {
  generateRandomNumber: function(){
      var randomNumber = Math.floor(Math.random() * 101);
      return randomNumber;  
  }, 

  generatedNumber: this.generateRandomNumber()
};

但我收到错误:Uncaught TypeError: undefined is not a function

我只想让新属性包含从同一对象中的方法返回的内容。

3 个答案:

答案 0 :(得分:4)

在对象存在之前,您无法访问该对象(调用该函数)。

您必须分两步完成此操作:

 var model = {
    generateRandomNumber: function(){
        var randomNumber = Math.floor(Math.random() * 101);
        return randomNumber;  
    }
};

model.generatedNumber = model.generateRandomNumber()

由于该方法并不依赖于this(这首先引出了它为什么是对象方法的问题),所以你可以单独定义函数。

function generateRandomNumber (){
    var randomNumber = Math.floor(Math.random() * 101);
    return randomNumber;  
}

var model = {
    generateRandomNumber: generateRandomNumber,
    generatedNumber: generateRandomNumber()
};

答案 1 :(得分:0)

在对象声明中无法访问函数generateRandomNumber,因为尚未完全解析对象文字。试试这个:

var obj = {
    generateRandomNumber: function() {
        return this.generatedRandomNumber = Math.floor(Math.random() * 101);
    }
}

obj.generateRandomNumber();
alert(obj.generatedNumber);

答案 2 :(得分:0)

您的问题在于您的引用,在对象中使用this.generateRandomNumber ..这将无效。为什么不这样做:

var model = {
  generateRandomNumber: function() {return Math.floor(Math.random()*101;}, generatedNumber: Math.floor(Math.random()*101};

这会产生同样的效果。