javascript - JavaScript 构造函数中的 "var"变量会发生什么?

标签 javascript constructor var

例子:

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;

(增加一点兴趣 -- 如果 balancestringnumberboolean ,即使您返回它,也不会给人们编辑权限,甚至不会授予永久查看权限——标量变量是按值传递的,因此您当时只是传递 balance 的值-- 然而,如果 balance 是一个对象、一个函数或一个数组,他们就可以永久修改你的内部运作)

注意:方法HAVE要在构造函数内部分配才能工作。 原型(prototype)无法访问内部变量。 稍后添加方法不会让他们访问内部变量。

这意味着每个实例将占用更多的内存,因为每个实例都有自己的方法副本,并且有自己的变量副本。 但是,如果您正在做的事情需要私有(private)数据,这将是获取它的好方法。

关于javascript - JavaScript 构造函数中的 "var"变量会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11955538/

相关文章:

javascript - 监控运行 JavaScript 的 IE 性能的工具

ruby - 如何在 Ruby 中创建复制构造函数

JavaScript block 作用域与 let

c# - 我如何更改此代码,以便它改为写入字符串?

jQuery:唯一的 Each() var append

javascript - 如何使用 mongodb 聚合框架比较两个日期之间的分组数据

javascript - GEXF文件节点定位,逻辑是什么?

haskell - 在 Haskell 中如何将构造函数作为参数传递并对其进行匹配

php - 无法引用类 __construct() 中设置的 PDO 实例

javascript - Sequelize : instance. get 不是一个函数