例子:
function Foo() {
this.bla = 1;
var blabla = 10;
blablabla = 100;
this.getBlabla = function () {
return blabla; // exposes blabla outside
}
}
foo = new Foo();
原始问题:
我知道 bla
将被分配给 Foo 的每个实例。
blabla
会发生什么?
新问题:
我现在的理解:
this.bla = 1; // will become an attribute of every instance of FOO.
var blabla = 10; // will become a local variable of Foo(**not** an attribute of every instance of FOO), which could be accessed by any instance of FOO only if there's a method like "this.getBlabla".
blablabla = 100; // will define a **new** (or change if exist) global(window) variable.
[问题:]我理解正确吗?
最佳答案
您为 this
提供的任何内部方法——即:this.method = function () {};
while inside 你的 Foo 构造函数,all 将引用 blahblah
,它对每个实例都是唯一的Foo
对象。
function Wallet () {
var balance = 0;
this.checkBalance = function () { return balance; };
this.depositAmount = function (amount) { balance += amount; };
}
var wallet = new Wallet();
wallet.checkBalance(); // 0
wallet.depositAmount(3);
wallet.checkBalance(); // 3
但它完全受到保护,无法从钱包外部访问,除非您通过特权功能将其归还给某人。
wallet.balance; // undefined;
(增加一点兴趣 -- 如果 balance
是 string
、number
或 boolean
,即使您返回它,也不会给人们编辑权限,甚至不会授予永久查看权限——标量变量是按值传递的,因此您当时只是传递 balance 的值-- 然而,如果 balance 是一个对象
、一个函数
或一个数组
,他们就可以永久修改你的内部运作)
注意:方法HAVE要在构造函数内部分配才能工作。 原型(prototype)无法访问内部变量。 稍后添加方法不会让他们访问内部变量。
这意味着每个实例将占用更多的内存,因为每个实例都有自己的方法副本,并且有自己的变量副本。 但是,如果您正在做的事情需要私有(private)数据,这将是获取它的好方法。
关于javascript - JavaScript 构造函数中的 "var"变量会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11955538/