JavaScript使用构造函数设置变量

时间:2018-09-18 18:51:52

标签: javascript variables nested-function

我试图在构造函数中设置一个可以由嵌套函数表达式调用的变量。不太确定该怎么做

var test = function() {
  var a;

  function test(a, b, c) {
    this.a = a;
    this.b = b;
    this.c = c;

  }
  test.getvariableA = function() {
    //not returning a variable that is supposed to be set by the constructor
    console.log(this.a);
  };
  return test;
}();

var t = new test("pizza", "pasta", "steak");
//does not return the variable
test.getvariableA();
//this returns the variable
console.log(t.a);

  

test.getvariableA();

这应该返回构造函数设置的变量。也许我对另一种语言感到困惑 感谢您的任何提前帮助。

2 个答案:

答案 0 :(得分:7)

  

这将返回变量:if ($_SERVER["REQUEST_METHOD"] == "POST") { if (check_field($_POST['name'])) { $form_errors['name'] = 'Name is invalid'; } if (check_field($_POST['email'])) { $form_errors['email'] = 'E-mail is invalid'; } if (count($form_errors) == 0) { // All validations succeeded // Continue processing the form // Show confirmation for user // DO NOT REDRAW THE FORM!!! } else { // Somehow jump to the SHOW_FORM below } } elseif (SHOW_FORM) { // Show ALL errors we have collected, if any print_r($form_errors); /* * A block of code that draws the form! * A block of code that draws the form! * A block of code that draws the form! */ } else { // Show a list of records to edit }

对,因此该属性位于console.log(t.a);实例上。

但是您的t函数根本不了解test.getvariableA!调用t时,它确实尝试访问test.a

您可能希望将方法放在类的原型对象上,而不是构造函数本身上。这样,它将被所有实例(例如test.getvariableA())继承,您可以在t上调用它以获得t

t.a

答案 1 :(得分:1)

这里的问题是,您要在构造函数之外定义getvariableA并将其附加到函数test上。因此,getvariableA是一种“公共”方法,它并不指向您创建的t实例(或您将使用new关键字创建的任何其他实例)。

换句话说,this内部的test.getvariableA指向函数构造函数本身,而不是该构造函数的任何特定实例(在您的示例中为t)。

当您在构造函数之外的函数上附加方法时,无需创建新实例即可访问它。如果您console.log(test.getvariableA)可以访问此方法而无需创建new实例,而console.log(test.a)显示为undefined,因为a已分配给该类的每个新实例。

希望这至少可以澄清一下,如果不清楚,抱歉。