JavaScript 使用构造函数设置变量
JavaScript setting variables with a constructor
我试图在构造函数中设置一个可以被嵌套函数表达式调用的变量。不太确定如何执行此操作
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();
这应该是返回构造函数设置的变量。也许我对另一种语言感到困惑
提前感谢您的帮助。
this returns the variable: console.log(t.a);
对,所以 属性 在 t
实例上。
但是您的 test.getvariableA
函数根本不知道 t
!当您调用 test.getvariableA()
.
时,它会尝试访问 test.a
您可能希望将方法放在 class 的原型对象上,而不是构造函数本身。这样它将被所有实例继承(如 t
),您可以在 t
上调用它以获得 t.a
:
var test = function() {
// var a; - this is not used anywhere, drop it
function test(a, b, c) {
this.a = a;
this.b = b;
this.c = c;
}
test.prototype.getVariableA = function() {
// ^^^^^^^^^^
console.log(this.a);
};
return test;
}();
var t = new test("pizza", "pasta", "steak");
t.getVariableA(); /*
^ */
console.log(t.a);
这里的问题是您在构造函数外部定义 getvariableA
并将其附加到函数 test
上。因此 getvariableA
是一个 "public" 方法,并不指向您创建的 t
实例(或您将使用 new
关键字创建的任何其他实例)。
换句话说,test.getvariableA
内部的 this
指向函数构造函数本身,而不是此构造函数的任何特定实例(在您的示例中为 t
)。
当您将方法附加到构造函数外部的函数时,您无需创建新实例即可访问它。如果您 console.log(test.getvariableA)
您可以看到您可以访问此方法而无需创建 new
个实例,而 console.log(test.a)
显示未定义,因为 a
被分配给 [=31= 的每个新实例].
希望这至少能澄清一点,如果不清楚,请见谅。
我试图在构造函数中设置一个可以被嵌套函数表达式调用的变量。不太确定如何执行此操作
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();
这应该是返回构造函数设置的变量。也许我对另一种语言感到困惑 提前感谢您的帮助。
this returns the variable:
console.log(t.a);
对,所以 属性 在 t
实例上。
但是您的 test.getvariableA
函数根本不知道 t
!当您调用 test.getvariableA()
.
test.a
您可能希望将方法放在 class 的原型对象上,而不是构造函数本身。这样它将被所有实例继承(如 t
),您可以在 t
上调用它以获得 t.a
:
var test = function() {
// var a; - this is not used anywhere, drop it
function test(a, b, c) {
this.a = a;
this.b = b;
this.c = c;
}
test.prototype.getVariableA = function() {
// ^^^^^^^^^^
console.log(this.a);
};
return test;
}();
var t = new test("pizza", "pasta", "steak");
t.getVariableA(); /*
^ */
console.log(t.a);
这里的问题是您在构造函数外部定义 getvariableA
并将其附加到函数 test
上。因此 getvariableA
是一个 "public" 方法,并不指向您创建的 t
实例(或您将使用 new
关键字创建的任何其他实例)。
换句话说,test.getvariableA
内部的 this
指向函数构造函数本身,而不是此构造函数的任何特定实例(在您的示例中为 t
)。
当您将方法附加到构造函数外部的函数时,您无需创建新实例即可访问它。如果您 console.log(test.getvariableA)
您可以看到您可以访问此方法而无需创建 new
个实例,而 console.log(test.a)
显示未定义,因为 a
被分配给 [=31= 的每个新实例].
希望这至少能澄清一点,如果不清楚,请见谅。