我正在尝试编写一个简单的函数来验证输入,但我在访问父对象函数时遇到问题。
我认为问题是我需要一个闭包,但由于我对 js 很陌生,而且我很难理解闭包,我想也许会在我的代码中看到它的作用如果确实是问题所在,可能会有所帮助。
function validate(value, validator){
if(validator == 'login_cred'){
testName(value);
}
var test = {
minLength: function (val, length) {
return val.length >= length;
}
}
function testName(value){
if(!test.minLength(value, 5)){
console.log('more chars please...');
}
}
}
//call
validate("str", 'login_cred');
当我调用该函数时,出现测试未定义错误。
这是需要闭包的情况吗?...如果是这样,闭包在上面的代码中如何最好地工作?
最佳答案
函数 testName 被提升。因此,您的代码实际上看起来像这样。
function validate(value, validator){
function testName(value){
if(!test.minLength(value, 5)){
console.log('more chars please...');
}
}
if(validator == 'login_cred'){
testName(value);
}
var test = {
minLength: function (val, length) {
return val.length >= length;
}
}
}
//call
validate("str", 'login_cred');
如您所见,测试在调用时尚未声明,简单地将 testName 放在底部不会改变这一点。只需将您的代码更改为此即可。
function validate(value, validator){
var test = {
minLength: function (val, length) {
return val.length >= length;
}
}
if(validator == 'login_cred'){
testName(value);
}
function testName(value){
if(!test.minLength(value, 5)){
console.log('more chars please...');
}
}
}
//call
validate("str", 'login_cred');
关于javascript - 无法在尝试的验证函数中访问 javascript 父函数 - 可能需要关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126890/