2015-03-19 75 views
1

我试图创建一个对象中的属性中,我不想被任何从方法相同的函数中返回的值:如何调用对象的方法

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

    generatedNumber: this.generateRandomNumber() 
}; 

,但我得到一个错误:Uncaught TypeError: undefined is not a function

我只是想拥有新的属性来包含从同一个对象内的方法返回的任何东西。

回答

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() 
}; 
0

功能generateRandomNumber不是对象声明中访问,因为文字的对象还没有被完全解析。试试这个:

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

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

你的问题是你的参考,使用this.generateRandomNumber对象内..这是行不通的。为什么不这样做:

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

这将产生同样的效果。