gpt4 book ai didi

javascript - 在函数内部定义函数,如果存在则运行

转载 作者:行者123 更新时间:2023-11-29 19:32:53 25 4
gpt4 key购买 nike

我正在定义一个名为 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' );

如果它是在“this”中定义的,谁能指出我正确的方向来敲响 luhn(或与此相关的任何其他函数)?

最佳答案

改为使用括号表示法:

if (typeof this[engine] === 'function') {
this[engine](cardnumber);
}

... 我宁愿在这里选择 engineName 而不是 engine (因为您传递的是函数名称,而不是函数本身)。说到这些,我不得不说我可能更愿意放弃这种方法以支持方法注入(inject):在别处定义 luhn 函数,将其直接传递给 Validator 构造函数。

function luhn(cardnumber) { ... }

// inside Validator function
if (typeof engine === 'function') {
engine(cardnumber);
}

var validator = new Validator('5555...', 'Mastercard', luhn);

关于javascript - 在函数内部定义函数,如果存在则运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26481291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com