如何处理JavaScript中构造函数中声明的变量?
当我执行这个时如何处理JavaScript中构造函数中声明的变量?,javascript,Javascript,当我执行这个时 function jQueryValidatorWrapper(formId, rules, messages) { var validator = $("form:visible[id='" + formId + "']").validate({ onchange: false, messages: messages, r
function jQueryValidatorWrapper(formId, rules, messages) {
var validator = $("form:visible[id='" + formId + "']").validate({
onchange: false,
messages: messages,
rules: rules
});
this.validate = function (hideErrors) {
var showErrorMessage = hideErrors ? false : true;
// What does 'validator' refer to?
var result = validator.form();
};
}
jQueryValidatorWrapper函数只有一个用它声明的方法,所以当构造函数执行时,它只是用validate方法创建了一个对象
jQueryValidatorWrapper中声明的验证程序变量会发生什么变化?它没有前缀,因此它不是正在构造的对象的一部分
验证器变量是全局变量吗?或者它是验证方法闭包的一部分?本地验证程序变量不是全局变量;由于闭包,它只能在validate方法中访问
根据Douglas Crockford的文章,可以将其视为jQueryValidatorWrapper对象的私有成员:
3个构造函数参数也是如此。本地验证器变量不是全局变量;由于闭包,它只能在validate方法中访问
根据Douglas Crockford的文章,可以将其视为jQueryValidatorWrapper对象的私有成员:
3个构造函数参数也是如此。验证器不是全局变量。。。它将存在于闭包中,尽管构造函数仍然是函数。局部变量的处理方式和作用域的工作方式没有区别。验证器不是全局变量。。。它将存在于闭包中,尽管构造函数仍然是函数。局部变量的处理方式和作用域的工作方式没有区别。因此,如果我每次为3个构造函数参数创建多个具有不同数据的jQueryValidatorWrapper实例,是否会为以前的实例修改闭包环境?不,每个实例都有自己的副本。下面是一个例子来说明:@Lakeland FL每次调用一个函数时,都会创建一个全新的执行上下文,因此在此实例中也会创建一个全新的闭包。因此,如果我要创建jQueryValidatorWrapper的多个实例,每次使用3个构造函数参数的不同数据,是否会为以前的实例修改闭包环境?不,每个实例都有自己的副本。这里有一个例子来说明:@Lakeland FL每次调用函数时,都会创建一个全新的执行上下文,因此在这个实例中也会创建一个全新的闭包。
var validatorObj = new jQueryValidatorWrapper('testForm', [], []);
validatorObj.validate();