如何更改 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 中遗漏了很多信息,这使得调试变得困难。
根据我的理解,问题是:
- 您希望 jQuery 对象的
value
属性 存储在您包装在对象中的数组中。
- 您想用您编写的
setData
函数存储此 属性。
- 您想使用您编写的
getAnArray
函数检索该对象。
我认为这不是原型的问题,但由于缺乏提供给我们的信息,它可能是任何数量的东西。如果你回来说 "Oh, it was something else completely."
我不会感到惊讶
我制作了一个 fiddle,它成功地从 anArray
对象中设置和获取数据,您可以将其用作示例。
以下是您想要查看的一些问题,它们将帮助您进行调试:
- 您没有在此代码段中设置
anArray[index]
对象。所以如果我们要从表面上看,setData
函数应该抛出一个 ReferenceError
.
- 您没有告诉我们您是在事件中调用
setData
函数还是在页面加载时调用。如果是后者,那么根据您在顶部 post 编辑的 html,您在 input
字段中还没有任何数据。只有当字段中有数据时才需要调用setData
函数。
- 您可能在
$(document).ready(function(){ ... })
调用之外调用 jQuery 对象,因此您通过 $(".abc")
调用获得的值未定义。
试试看,希望它们能奏效。
为了让您的问题更容易调试:
- 在隔离环境中编写所有实验代码,这样在 posting 之前不必删除所有机密内容。
- 运行 您的代码并确保它按预期运行。
- 向我们展示该代码的 所有 以便我们了解所有数据的来源以及每个元素如何与其他元素交互。例如,我们目前不知道
anArray
数组是如何填充的,所以我不得不做出假设。我们也不知道 id
、pid
或 "questions-worth-asking"
是如何产生的,因此它们的加载方式可能会产生副作用。
- 使用某种风格指南编写代码,使其更易于阅读。这也将有助于缩短您的调试时间,并有助于防止因您可能犯的愚蠢错误而导致的错误。
编辑:
我知道您在 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 所说,我们需要有关您的设置和逻辑流程的更多信息。
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 中遗漏了很多信息,这使得调试变得困难。
根据我的理解,问题是:
- 您希望 jQuery 对象的
value
属性 存储在您包装在对象中的数组中。 - 您想用您编写的
setData
函数存储此 属性。 - 您想使用您编写的
getAnArray
函数检索该对象。
我认为这不是原型的问题,但由于缺乏提供给我们的信息,它可能是任何数量的东西。如果你回来说 "Oh, it was something else completely."
我不会感到惊讶我制作了一个 fiddle,它成功地从 anArray
对象中设置和获取数据,您可以将其用作示例。
以下是您想要查看的一些问题,它们将帮助您进行调试:
- 您没有在此代码段中设置
anArray[index]
对象。所以如果我们要从表面上看,setData
函数应该抛出一个ReferenceError
. - 您没有告诉我们您是在事件中调用
setData
函数还是在页面加载时调用。如果是后者,那么根据您在顶部 post 编辑的 html,您在input
字段中还没有任何数据。只有当字段中有数据时才需要调用setData
函数。 - 您可能在
$(document).ready(function(){ ... })
调用之外调用 jQuery 对象,因此您通过$(".abc")
调用获得的值未定义。
试试看,希望它们能奏效。
为了让您的问题更容易调试:
- 在隔离环境中编写所有实验代码,这样在 posting 之前不必删除所有机密内容。
- 运行 您的代码并确保它按预期运行。
- 向我们展示该代码的 所有 以便我们了解所有数据的来源以及每个元素如何与其他元素交互。例如,我们目前不知道
anArray
数组是如何填充的,所以我不得不做出假设。我们也不知道id
、pid
或"questions-worth-asking"
是如何产生的,因此它们的加载方式可能会产生副作用。 - 使用某种风格指南编写代码,使其更易于阅读。这也将有助于缩短您的调试时间,并有助于防止因您可能犯的愚蠢错误而导致的错误。
编辑:
我知道您在 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 所说,我们需要有关您的设置和逻辑流程的更多信息。