javascript - 不使用当前分配给公共(public)函数的对象数据的调用方法

标签 javascript

其实我正在研究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/

相关文章:

javascript - MeteorJS 中的依赖管理

javascript - 从 Android 手机上的 HTML 页面发送 SMS 文本,而不显示 SMS 窗口

Javascript:Promise.all 似乎没有解决

javascript - 关于javascript的var关键字的问题

javascript - 为什么 react-transition-group 在路由更改时不调用 componentWillEnter 或 componentWillLeave?

javascript - 从其他范围访问对象(javascript)

javascript - Protocol Buffers byte[] 数组到 Node Javascript 缓冲区

javascript - 省略号单词加载屏幕

javascript - 在选择单选按钮值时将值插入输入类型

javascript - javascript 中对 undefined object 的引用