【问题标题】:How to change an attribute of a javascript prototype object如何更改 javascript 原型对象的属性
【发布时间】:2015-05-05 19:35:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript object attributes prototype


    【解决方案1】:

    您的帖子中遗漏了很多信息,因此难以调试。

    据我了解,问题在于:

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

    我认为这不是原型的问题,但由于我们缺乏信息,这可能是很多事情。如果你回来说“哦,那完全是另一回事”,我不会感到惊讶。

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

    这里有一些你想看看的问题,它们可以帮助你调试:

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

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

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

    1. 在隔离环境中编写所有实验代码,这样在发布前不必删除所有机密内容内容。
    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]);
    };
    

    【讨论】:

    • 在 setData 中记录了日志,val 返回我输入的任何内容,并且 .data 两边都为空。 1) 已设置 2) 这是一个事件 3) 点击事件在 $(document).ready 中,它调用在 $(document).ready 函数之外声明的函数
    【解决方案2】:

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

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

    【讨论】:

    • 尝试并详细说明调用时的上下文:objAnArray.setData(0,$(".abc").eq(0).val());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2015-07-21
    相关资源
    最近更新 更多