0

尽管我读了很多(也在网站上),但我仍然对关闭的这一部分感到困惑。从这里获取代码: http ://www.crockford.com/javascript/private.html

So what is the different between this:
function Container(param) {
    this.member = param;
}
...And this -
function Container(param) {
    var member = param;
     // and also in case it's without "var", I.e. global
}

请解释为每种情况创建 obj 时会发生什么 -

var myContainer = new Container('abc');

另外 - 对象参数的访问差异是什么?你能举一个函数作为参数返回函数的例子吗?

非常感谢!

4

2 回答 2

0

在函数 Test 中,当我们用 new Test 声明一个变量 obj1 时。它是通过称为“测试”的构造函数创建的。

这个过程就像我们以正常的方式调用一个函数。当然,这会产生一个局部变量“名称”。当我们取消一个名为“this.getName”的函数表达式时,它只是表示函数“Test”的表达式。

但是当我们调用“新测试”时,它会返回一个具有键值调用“getName:function{}”的对象。当我们调用“obj1.getName”时,它返回变量“name”。但是它找不到 getName 的局部变量“name”,所以它会搜索它的 parent 范围以查找是否有变量“name”,直到我们得到它才会停止,或者只是返回“undefined”。这会创建一个“引用”来将变量“name”保留在内存中,但我们可以通过函数“getName”来获取它。

对于所有这些,我们在函数“Test”中创建了一个私有变量。:) 希望这能有所帮助。

于 2014-03-03T02:22:45.610 回答
0

这是我的看法:当你使用new通过函数创建对象时,var初始化的变量是局部变量:

function Test(){
    var name = "John";
    this.getName = function(){
        return name;   
    }
}
var obj1 = new Test();
console.log(obj1.name);  //undefined
console.log(obj1.getName());  //John

这意味着您不能直接在函数外部读取变量。这就像 Java 或 C++ 中的私有变量;

但是当你使用 this.name = "John" 时,情况就不同了:

function Test2(){
    this.name = "John";
}
var obj2 = new Test2();
console.log(obj2.name)  //"John"

您可以直接读取变量,这就像 java 或 c++ 中的“公共”变量。

希望这对你有用。:)

于 2014-03-01T03:07:30.373 回答