【发布时间】:2017-03-04 20:21:28
【问题描述】:
到目前为止,我对闭包的理解是,如果一个函数返回一个函数,那么返回的函数(对象)会记住其(词法)父函数作用域的上下文,我在想一个可以实现闭包的场景没有实现嵌套函数。
下面的代码就是一个很好的例子。我在这里所做的是:
我使用了构造函数来创建对象,并且我使用了在内部定义的方法toString() 中传递给它的参数。
现在我创建了两个对象,并且两个对象都有各自的 id, name, madeInYear 副本。
请注意,我可以通过使用productId, productName, productOriginDate 获得相同的结果,但只是为了看到关闭,我编写了这样的代码 sn-p。
我观察到的另一件有趣的事情是我可以访问productId,但不能访问id。这是否意味着它们不是在 object 的上下文中创建的?
function f1(id,name,madeInYear)
{
this.productId=id;
this.productName=name;
this.productOriginDate=madeInYear;
this.toString=function()
{
console.log("Function Parameters:"+id+" "+name+" "+madeInYear);
console.log("Objects Method:"+this.productId+" "+this.productName+" "+this.productOriginDate);
}
}
var obj1=new f1(1,"Parker Pen","2001");
var obj2=new f1(2,"Jetter",2000);
obj1.toString();
obj2.toString();
obj1.productId;
obj2.productId;
输出
Function Parameters:1 Parker Pen 2001
Objects Method:1 Parker Pen 2001
Function Parameters:2 Jetter 2000
Objects Method:2 Jetter 2000
1
2
【问题讨论】:
-
这在技术上不是一个闭包;这是constructor。
-
是什么让您认为您无法访问
id?您的输出看起来工作正常。 -
我可以访问 studentId 而不是 id。
-
applologies..its productid
标签: javascript closures