对象中的方法是否形成闭包、拥有闭包性质
首先,看了个概念,在《JavaScript高级程序设计》中,闭包指的是:
有权访问另一个函数作用域中的变量的函数,创建闭包的常见方式,就是在一个函数内部创建另一个函数
然后呢,我就要自问自答两个问题
- 1.在对象中定义的方法,能够访问到对象中的变量吗?对象中的变量是私有的吗?
- 2.对象是否是函数呢?
首先,在对象中定义的方法,能够访问到对象中的变量吗?对象中的变量是私有的吗?
答案是可以!是私有的!
var obj = {
age:'1996',
getNameFunc:function () {
return this.name ; //根据前一篇文章《this的指向问题》,这个this指向 obj
}
};
alert(name);
alert(age);
//alert(obj.getNameFunc()); //袁佳
其次,对象是否是函数呢?
函数是一种对象,而对象是通过函数创建的,这个观点来自
深入理解javascript原型和闭包(2)——函数和对象的关系
多说一句,我个人认为更准确的说法是
所有对象的创建都需要通过一个构造函数,虽然通过一个语法糖(即下方对象字面量)可以省略掉构造函数,但构造函数是确实存在的。 构造函数本身也是一个对象,我们可以称之为函数对象,函数对象也可以通过它的构造函数Function()来创建。 JavaScript内置不少函数对象,如Object()、String()、Array()、Function()等,它们既是对象,也可以作为构造函数用来构造其它的对象。 除此之外,我们也可以定义自己的构造函数。
比如说(对象字面量)
var obj = { name:'袁佳', age:'1996', getNameFunc:function () { return this.name ; } }
也可以这么写(Object构造函数)
var obj = new Object(); obj.name = '袁佳'; obj.age='1996'; obj.getNameFunc =function () { return this.name ; };
最后总结一下,个人认为,对象内的方法形成的闭包,起码是拥有闭包的性质的,而且也具备闭包的优点—— 从外部可以通过这个对象内的方法,得到这个对象中的私有变量。
PS:感觉上这形成的就是闭包吧。。。如果有说错,希望各位大佬指正