Javascript对象无法访问其属性

时间:2017-07-09 06:06:49

标签: javascript

我得到了一个包含一些信息的对象

function node(id, title, content, isPrivate, dateOfCreation) {
  this.id = id;
  this.title = title;
  this.content = content;
  this.isPrivate = isPrivate;
  this.dateOfCreation = dateOfCreation;
  this.lastEdited = dateOfCreation;
}

我可以通过id

搜索这个对象
// this.nodes -> my array of objects
  this.getNodeById = function(nodeId){
    return $.grep(this.nodes, function(e){ return e.id === nodeId; });
  }

所以这似乎工作正常。测试时,我先调用一个方法"测试"

function test(){ // add a new object to the store at this.nodes
  store.addNode(new node("abcde12345", "title one", "content one", false, getCurrentDate()));
}

并成功添加对象。之后我在初始化网站时调用了一个方法

function initEditor(nodeId){
test(); // call the testroutine
nodeId = "abcde12345"; // set the id
var n = store.getNodeById(nodeId); // search for this object in the store (datastore object)

var i = n.id;
var t = n.title;
var c = n.content;
var p = n.isPrivate;
var d = n.dateOfCreation;
var l = n.lastEdited;

debugger;

所以我的问题是,变量i,t,c,p,d,l为空。而且我不明白为什么因为变量" n"是正确的。 n存储对象,但我无法访问它的属性。

有关详细信息,请参阅我的数据存储区" class"

var store = new dataStore();

function dataStore() {
  this.nodes = []; // the array of my objects

  this.getNodes = function() { // get all the objects
    return this.nodes;
  }

  this.addNode = function(entry) { // add a new object
    this.nodes.push(entry);
  }

  this.deleteNode = function(entry) { // delete an object from the array
    var index = this.nodes.indexOf(entry);
    if (index > -1)
      this.nodes.splice(index, 1);
  }

  this.getNodeById = function(nodeId){ // get an object by its id
    return $.grep(this.nodes, function(e){ return e.id === nodeId; });
  }
}

1 个答案:

答案 0 :(得分:1)

变量的内容为undefined,因为$.grep(array, function)返回一个数组,其中包含满足过滤函数的所有元素。

如果id是唯一的,您可以更改.getNodeById()以始终返回结果数组的第一个元素:

this.getNodeById = function(nodeId){
  return $.grep(this.nodes, function(e){ return e.id === nodeId; })[0];
}

或者您可以使用Array.prototype.find()代替$.grep()

this.getNodeById = function(nodeId){
  return this.nodes.find(function(e){ return e.id === nodeId; });
}

在这两种情况下,如果没有具有给定id的节点,结果将为undefined