gpt4 book ai didi

javascript - 如何从javascript中的字符串调用私有(private)函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:46 24 4
gpt4 key购买 nike

我正在构建一个小的“Validate”对象,它基本上公开一个验证方法并获取一个元素的 ID 和一组验证器,然后返回 true 或 false。

基本上这就是我想要实现的目标

var Validator = function() {
var no_digits = function( el ) {
return true;
}
var no_uppercase_letters = function( el ) {
return true;
}
return {
validate: function( element_id, validators ) {

//here i would like to iterate on the validators array and for each
//element of the array i would like to check if a function of the same name
// exist and call that function passing the element

}
}
}();

然后这样调用

var element_valid = Validator.validate( 'myid', [ "no_digits", "no_uppercase_letters"] );

第二个参数是我要调用的验证器数组。

关于好的面向对象方法有什么建议吗?我想将验证函数保密,否则我可以这样做

var Validator = function() {


return {
validate: function(element_id, validators) {
console.log(this);
this[validators]();

// Validator[validators](element_id);
},
no_digits: function(el) {
alert('hi');
return true;
},
no_uppercase_letters: function(el) {
return true;
}
}
}();

但我宁愿将 no_gits 和 no_uppercase_letters 函数保密

var element_valid = Validator.validate('myid', "no_digits");

最佳答案

var valdiate = (function() {  

var _p={};//toss all private members into a single object.
_p.list=[];
_p.init=function(){
_p.list=[];
};

var noDigits = function() {

};

//public members. use "this" to reference object followed by the method.
//however valdiate._p.list won't be accessible to the global scope
return {
check: function() {
noDigits();
},
fnNaMe1:function(){
_p.init();
},
fnName2:function(){
return _p.list.slice(0);//return a clone
}
};
})();

它称为“模块模式”。这种模式在 JavaScript 中通常简称为“封装”。闭包是另一种可能,但更具体地说,在这种情况下它是纯粹的封装。

封装只是意味着您将一些成员设为私有(private)。在这种情况下什么是私有(private)的?在这种情况下,noDigits 变量是私有(private)的。

关于javascript - 如何从javascript中的字符串调用私有(private)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10389712/

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