好的......在这里相对新手,可能超出了我自己,但这里就是这样。我创建了一个对象以帮助验证表单。该对象被称为" Field"看起来像这样:
var Field = {
mini : {
val : 3,
err : "Wrong length. Your entry needs to be greater than 2 characters",
valid : false,
check : function(target){
var target = event.target || event.srcElement;
if (target.value.length < this.mini.val) {
this.mini.valid = false;
fadeIn("mini",this.mini.err);
} else {
this.mini.valid = true;
fadeOut("mini",this.mini.err);
return null;
}
},
},
max : {
val : 5,
err: "Wrong length. Your entry needs to be less than 30 characters",
valid : false,
check : function(target){
var target = event.target || event.srcElement;
if (target.value.length > this.max.val) {
this.max.valid = false;
fadeIn("max",this.max.err);
} else {
this.max.valid = true;
fadeOut("max",this.max.err);
return null;
}
},
},
regex : {
val : /[^a-zA-Z- ]/,
err : "Letters, hyphens, apostrophes and spaces only please.",
valid : false,
check : function(){
var target = event.target || event.srcElement;
if (target.value.match(this.regex.val)) {
this.regex.valid = false;
fadeIn("regex",this.regex.err);
} else {
this.regex.valid = true;
fadeOut("regex",this.regex.err);
return null;
}
},
},
hintID : ""
}
我觉得这有点笨拙,而且我正在研究如何进一步排序。
我已按如下方式创建了此对象的多个实例:
var firstName = Object.create(Field);
firstName.hintID = fnHint;
firstName.regex.val = /[^a-zA-Z- ]/;
firstName.regex.err = "Letters, hyphens, apostrophes and spaces only please.";
var lastName = Object.create(Field);
lastName.hintID = lnHint;
lastName.regex.val = /[^a-zA-Z- ]/;
lastName.regex.err = "Letters, hyphens, apostrophes and spaces only please.";
var age = Object.create(Field);
age.max.val = 3;
age.max.err = "Wrong length. The age needs to be no more than 3 characters long.";
age.regex.val = /[^0-9]/;
age.regex.err = "Numbers only please.";
age.hintID = agHint;
到目前为止一切顺利。
当我尝试访问单独的对象实例时出现问题,尽管我打电话,我似乎总是得到最后一次出现。例如:
console.log(firstName.regex.err);
在console.log调用之前给出了regex.err最后声明的实例的值。例如,如果我将该代码放在lastName之后它给了我lastName.regex.err的值,在年龄之后它给了我age.regex.err的值...我可能在这里做些蠢事 - 它我一直都知道:-)我已经检查了它但似乎无法弄明白。有什么想法吗?
提前致谢。
燕姿
答案 0 :(得分:0)
那是因为Object.create() accepts a "prototype" as the first argument。然后发生的是使用相同原型创建的所有对象开始共享这些属性,这就是后续调用修改它们的原因。而不是使用Object.create(),你想要的是类似于Underscore.js或Lo-Dash中可用的“扩展”功能(this SO question中有关于.extend()的更多信息)。