JavaScript:在构造函数中使用原型函数更改变量

时间:2016-02-08 15:20:42

标签: javascript class variables prototype

我是"类"的新手。在JavaScript中我希望我在我的问题中使用了正确的术语。

我试过这个。构造函数中的变量可以通过原型定义的所有函数来使用。 这似乎在一个方向上,但我无法从函数中更新变量。

这是一个小小的问题 https://jsfiddle.net/2g4vnL9b/

var littleTest = function() {
  this.testVar = "blub";
}
littleTest.prototype = {
  changeTestVar: function(val) {
    this.testVar = val;
  },
  changeTestVar2: function(val) {
    return val;
  }
}

var myTest = new littleTest();
console.log(myTest.testVar); // -> blub

myTest.changeTestVar = "foo";
console.log(myTest.testVar); // -> blub

myTest.testVar = myTest.changeTestVar2("foo");
console.log(myTest.testVar); // -> foo

我试图从test.changeTestVar函数更新this.testVar,但它没有保存在对象中供以后使用。只有我直接设置才会保存。 有人可以解释一下为什么我的代码表现得像它的行为和我必须改变的东西吗?

非常感谢

4 个答案:

答案 0 :(得分:1)

您需要将changeTestVar作为函数调用,而不是使用新值覆盖它。

尝试以下方法:

myTest.changeTestVar("foo");
console.log(myTest.testVar);

此外,changeTestVar2根本不会更改this个变量,它只会返回传入的值。这通常称为"身份"功能,但它对你的对象没有持久影响。

答案 1 :(得分:0)

ChangeTestVar是一个函数,它用不同的情况编写

var myTest = new littleTest();
console.log(myTest.testVar); // -> blub

myTest.changeTestVar("foo");
console.log(myTest.testVar); // -> foo

FIDDLE

答案 2 :(得分:0)

您编码的原因不起作用是因为您覆盖了原型函数

myTest.changeTestVar = "foo"; //this is replacing the function for a string
console.log(myTest.testVar); // -> blub

因为你调用一个函数,所以应该像任何其他函数一样传递值

myTest.changeTestVar("foo");
console.log(myTest.testVar); // -> foo

答案 3 :(得分:0)

将参数传递给函数时,你可以通过直接更改变量的方式

var myTest = new littleTest();
console.log(myTest.testVar);

myTest.testVar="foo";
console.log(myTest.testVar);