2017-05-09 29 views
0

我想创建一个JavaScript对象,以便以后可以将其发布到我的后端,但我有一些麻烦,这个JavaScript对象。

这是我的代码,我努力。当我使console.log对象一切都很好,但是当我发布它与$.post我有一些错误。我认为,错误来了,因为在对象中我有一个方法,这可能会导致问题,但我需要该方法动态生成对象。

var appointmentsPart = { 
    "id":"appointments", 
    "integrationId":"1258514282" 
} 


var appointments = new objectPart('appointments', '1258514282'); 

appointments.addPart(appointmentsPart); 

console.log(appointments); //this shows the correct object 

function objectPart(id, integrationId){ 
    this.id = id; 
    this.integrationId = integrationId; 
    this.part = new Array(); 
    this.addPart = function(obj){ 
     this.part.push(obj); 
    } 
} 

当我做的console.log()万物是显示像我想,但问题是,当我想这个对象后使用$。员额()

$.post('/api.php', {api: appointments}, function(){ 
    console.log('test') 
}); 

我的PHP文件得到Cannot read property 'push' of undefined

我创建了一个jsfiddle帮助你理解我的问题。

+0

的jsfiddle是空 –

+0

@AlivetoDie我更新检查它现在 –

回答

5

您在这里有一个作用域的问题;

this.part = new Array(); 
this.addPart = function(obj){ 
    this.part.push(obj); 
} 

您使用的function(obj)创建它自己的范围内,有自己的this变量。所以,this.partthis.part = new Array();

同一个组来解决,我们的arrow功能;

this.part = new Array(); 
this.addPart = (obj) => { 
    this.part.push(obj); 
} 

箭头函数表达式具有比函数表达式较短的语法和不结合其自身的此,自变量,超级或new.target。

这里是你jsFiddle分支版本向你展示它的工作。

+0

正确和详细的解释。也推高了其他人 –

3

在你this.part.pushthis显示不objectPart功能,但addPart功能。小姐使用this;将this保存到变量以在其他函数中使用它。

+0

谢谢你这个固定我的问题。 –

2

的原因错误是this指的是什么。将您的代码更改为此以获取阵列推送工作。

function objectPart(id, integrationId){ 
    this.id = id; 
    this.integrationId = integrationId; 
    this.part = new Array(); 
    var arr = this.part; 
    this.addPart = function(obj){ 
     arr.push(obj); 
    } 
}