其实我正在研究apply、bind和call。为了测试它们,我简单地创建了一个简单的函数,如下所示。
var data = [{
"option": "com_easysocial",
"userId": localStorage.getItem("ckuser"),
"layout": "getConversations",
"view": "conversations",
"format": "json",
"limit": 2
}];
var Data = data['layout'];
function ajaxCall(arrayOfdata){
var score = arrayOfdata;
return score;
this.Data = score['layout'];
}
/***global variable & functions end***/
var contacts = {
data : [{
"option": "com_easysocial",
"userId": localStorage.getItem("ckuser"),
"layout": "getContacts",
"view": "conversations",
"format": "json",
"limit": 1
}],
Data: null
}
console.log(ajaxCall(contacts.Data));//null
ajaxCall.call (contacts, contacts.data);
console.log (window.Data); //undefined
console.log (contacts.Data); // null
对于call
使用后的console.log (contacts.Data)
。我期望 ajaxCall 函数内的数据存储从 contacts
对象发送的数据,从而显示布局的“getContacts”。但显示为空。这意味着它仍然使用联系人内部的数据。同样对于 window.Data 它返回未定义。我期望得到对话。有人可以解释一下吗?
最佳答案
这个方法:
function ajaxCall(arrayOfdata){
var score = arrayOfdata;
return score;
this.Data = score['layout']; // nothing will execute below the return statement.
}
在设置this.Data
之前返回..
你需要这个:
function ajaxCall(arrayOfdata){
var score = arrayOfdata;
this.Data = score['layout'];
return score;
}
调用this.Data
我会小心地定义全局变量并在函数中引用它们。
this.Data
可能引用一个不是窗口范围的 this
...
您将其留给调用该方法的人来传递范围,这并不理想。最好只使用返回值,或者创建类结构。
console.log(contacts.Data) 返回未定义,为什么?
实际上,如果你看:
var contacts = {
data : [{
"option": "com_easysocial",
"userId": localStorage.getItem("ckuser"),
"layout": "getContacts",
"view": "conversations",
"format": "json",
"limit": 1
}],
Data: null
}
contacts.data
是一个数组,所以
function ajaxCall(arrayOfdata){
var score = arrayOfdata;
this.Data = score['layout']; // score here is an array
return score;
}
在这里您看到分数是一个数组,您尝试使用字符串键进行访问,而不是执行以下操作:
this.Data = score[0]['layout'];
关于javascript - 不使用当前分配给公共(public)函数的对象数据的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38563113/