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

时间:2015-05-05 19:35:29

标签: javascript object attributes prototype

html base

<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消息时,它会返回与尚未更改的值相同的值。

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

编辑:此链接引导我沿着正确的路径http://www.gpickin.com/index.cfm/blog/websql-when-is-a-javascript-object-not-a-javascript-object

2 个答案:

答案 0 :(得分:1)

您的帖子中遗漏了很多信息,这些信息很难调试。

据我所知,问题在于:

  1. 您希望将jQuery对象的value属性存储在包装在对象中的数组中。
  2. 您希望使用您编写的setData函数存储此属性。
  3. 您希望使用您编写的getAnArray函数来检索该对象。
  4. 我不认为这是原型的问题,但由于缺乏给我们的信息,它可能是任何数量的东西。如果你回来说“噢,这完全是另一回事。”我不会感到惊讶。

    我创建了一个fiddle,可以成功设置和获取您可以用作anArray对象的数据。

    以下是您希望查看的一些问题,可以帮助您进行调试:

    1. 您未在此代码段中设置anArray[index]对象。因此,如果我们要采用面值,setData函数应该抛出ReferenceError
    2. 您没有告诉我们您是在活动中调用setData函数还是在页面加载时调用。如果是后者,那么根据您在顶部发布的html,您在input字段中将没有任何数据。只有当字段中有数据时才需要调用setData函数。
    3. 您可能正在调用$(document).ready(function(){ ... })调用之外的jQuery对象,因此您使用$(".abc")调用获得的值未定义。
    4. 尝试一下,希望那些工作。

      为了使您的问题更容易调试,请继续:

      1. 在隔离环境中写下您的所有实验代码,以便在发布之前不必删除所有机密内容内容。
      2. 运行您的代码并确保其按预期运行。
      3. 向我们显示该代码的全部,以便我们知道所有数据的来源以及每个元素与其他元素的交互方式。例如,我们目前不知道如何填充anArray数组,所以我不得不做出假设。我们也不知道idpid"questions-worth-asking"的来源,因此可能会产生副作用。
      4. 使用某种样式指南编写代码,以便于阅读。这也有助于缩短您的调试时间,并有助于防止您可能犯的错误。
      5. 编辑: 我知道您在console.log方法之前和之后都在调用setData。考虑将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]);
        };
        

答案 1 :(得分:1)

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

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