如何更改 javascript 原型对象的属性

How to change an attribute of a javascript prototype object

html 基地

<html>
  <head>
  </head>
  <body>
    <input type="text" class="abc"/>
  </body>
</html>

所以我有我的原型对象

function AnArray(){
    this.anArray=[];
}

AnArray.prototype.getAnArray=function(val){
    return this.anArray[val];
}

AnArray.prototype.setData=function(index,val){
    this.anArray[index].data=val;
}

var objAnArray=new AnArray();

对象最终看起来像这样

id: 1, pid: "questions-worth-asking", num: 1, data: null

我正在尝试像这样更改其中的一个属性

objAnArray.setData(0,$(".abc").eq(0).val());

当我在上述行前后使用 getAnArray() 运行 console.log 消息时,它 returns 与未更改的值相同。

我的问题是如何更改原型对象的属性?

编辑:这个link让我走上了正确的道路http://www.gpickin.com/index.cfm/blog/websql-when-is-a-javascript-object-not-a-javascript-object

您从 post 中遗漏了很多信息,这使得调试变得困难。

根据我的理解,问题是:

  1. 您希望 jQuery 对象的 value 属性 存储在您包装在对象中的数组中。
  2. 您想用您编写的 setData 函数存储此 属性。
  3. 您想使用您编写的 getAnArray 函数检索该对象。

我认为这不是原型的问题,但由于缺乏提供给我们的信息,它可能是任何数量的东西。如果你回来说 "Oh, it was something else completely."

我不会感到惊讶

我制作了一个 fiddle,它成功地从 anArray 对象中设置和获取数据,您可以将其用作示例。

以下是您想要查看的一些问题,它们将帮助您进行调试:

  1. 您没有在此代码段中设置 anArray[index] 对象。所以如果我们要从表面上看,setData 函数应该抛出一个 ReferenceError.
  2. 您没有告诉我们您是在事件中调用 setData 函数还是在页面加载时调用。如果是后者,那么根据您在顶部 post 编辑的 html,您在 input 字段中还没有任何数据。只有当字段中有数据时才需要调用setData函数。
  3. 您可能在 $(document).ready(function(){ ... }) 调用之外调用 jQuery 对象,因此您通过 $(".abc") 调用获得的值未定义。

试试看,希望它们能奏效。

为了让您的问题更容易调试:

  1. 在隔离环境中编写所有实验代码,这样在 posting 之前不必删除所有机密内容。
  2. 运行 您的代码并确保它按预期运行。
  3. 向我们展示该代码的 所有 以便我们了解所有数据的来源以及每个元素如何与其他元素交互。例如,我们目前不知道 anArray 数组是如何填充的,所以我不得不做出假设。我们也不知道 idpid"questions-worth-asking" 是如何产生的,因此它们的加载方式可能会产生副作用。
  4. 使用某种风格指南编写代码,使其更易于阅读。这也将有助于缩短您的调试时间,并有助于防止因您可能犯的愚蠢错误而导致的错误。

编辑: 我知道您在 setData 方法之前和之后调用 console.log。考虑将 console.log 也放在 方法 setData 中。

AnArray.prototype.setData = function (index, val) {
    console.log("Entering setData with: ", index, val, this.anArray[index]);
    this.anArray[index].data = val;
    console.log("Exiting setData with: ", this.anArray[index]);
};

在我看来,问题不在您的 javascript 中。你是说你在 objAnArray 上调用 setData 之前和之后 运行 console.log。也许这与您的 HTML 输入元素未更新或数据未及时传递有关。

正如 Keane 所说,我们需要有关您的设置和逻辑流程的更多信息。