JavaScript函数成员差异

JavaScript函数成员差异,javascript,closures,members,Javascript,Closures,Members,虽然我在网站上读了很多关于这一部分的文章,但我仍然对这一部分的结尾感到困惑。 从这里获取代码: 请解释为每个案例创建obj时会发生什么- var myContainer = new Container('abc'); 也- 参数与对象的访问差异是什么?你能举一个函数作为参数和返回函数的例子吗 非常感谢 以下是我的看法: 当您使用new通过函数创建对象时,变量initial by var是局部变量: function Test(){ var name = "John"; thi

虽然我在网站上读了很多关于这一部分的文章,但我仍然对这一部分的结尾感到困惑。 从这里获取代码:

请解释为每个案例创建obj时会发生什么-

var myContainer = new Container('abc');
也- 参数与对象的访问差异是什么?你能举一个函数作为参数和返回函数的例子吗

非常感谢

以下是我的看法: 当您使用new通过函数创建对象时,变量initial by 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++中的“公共”变量。
希望这对你有用。:)

在函数测试中,当我们用新测试声明变量obj1时。它是通过名为“Test”的constructor函数创建的

这个过程就像我们以正常的方式调用函数一样。当然,这使局部变量成为“name”。当我们清除一个名为“this.getName”的函数表达式时,它只是表示函数“Test”的表达式

但是当我们调用“newtest”时,它返回一个具有键值调用“getName:function{}”的对象。当我们调用“obj1.getName”时,它返回变量“name”。但是它找不到getName的局部变量“name”,因此它将搜索其父变量的作用域以查找是否有变量“name”,直到我们得到它或返回“undefined”它才会停止。这会生成一个“引号”以将变量“name”保留在内存中,但我们只能通过函数“getName”获取它


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

你知道var b的功能吗?它只是创建一个局部变量
b
<另一侧的code>a.b=..将属性
b
分配给对象
a
。两件完全不同的事情。非常感谢!!它确实很有帮助:)你能告诉我它是如何与原型一起工作的吗?(例如,对名称的安全访问与非安全访问)对不起,我的回答在这个评论模式下似乎太长了。所以我只是在回答模式下回答。:)
function Test2(){
    this.name = "John";
}
var obj2 = new Test2();
console.log(obj2.name)  //"John"