我正在定义一个名为Validator的函数。在此,我将this.luhn定义为另一个函数。现在,如果引擎参数传递给Validator函数,并且引擎函数存在于Validator中,我想运行它。在这一点上,我得到"引擎方法luhn没找到"在我的日志中。
代码:
var Validator = (function( cardnumber, cardtype, engine ){
this.cardnumber = cardnumber;
this.cards = {"mastercard":"51,52,53,54,55", "visa":"4"};
this.luhn = (function( cardnumber ){
var len = cardnumber.length,
mul = 0,
prodArr = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]],
sum = 0;
while (len--) {
sum += prodArr[mul][parseInt(cardnumber.charAt(len), 10)];
mul ^= 1;
}
return sum % 10 === 0 && sum > 0;
});
if( typeof this.engine != "undefined" ){
this.engine();
}
else {
console.log( "Engine for method " + engine + " not found" );
}
});
我是如何发起的:
var test = new Validator( '4861224212948679', 'visa', 'luhn' );
任何人都可以指向正确的方向来敲响luhn(或任何其他功能),如果它是在"这个" ?
答案 0 :(得分:3)
改为使用括号表示法:
if (typeof this[engine] === 'function') {
this[engine](cardnumber);
}
...我宁愿选择engineName
而不是engine
(因为您传递的是函数名称,而不是函数本身)。说到这些,我不得不说我可能更倾向于采用这种方法来支持方法注入:在其他地方定义luhn
函数,直接将它传递给Validator构造函数。
function luhn(cardnumber) { ... }
// inside Validator function
if (typeof engine === 'function') {
engine(cardnumber);
}
var validator = new Validator('5555...', 'Mastercard', luhn);