函数和对象中的闭包
Closures in functions and objects
下面的代码段也完全一样。第一个:
var obj_button = {
clicked: 1,
click: function() {
console.log(clicked);
}
};
第二个:
var Func_button = function() {
var clicked = 1;
this.click = function() {
console.log(clicked);
}
}
但当我想利用闭包时,第一种方法失败了:
func = new Func_button();
func.click(); // OK - works fine, outputs 1
obj_button.click(); // FAIL - he don't know what is "clicked"
所以我的问题是:为什么在第一种方法中,方法click()不能看到"点击"的参数。闭包不应该覆盖这个参数吗(就像第二个例子一样)?
否,因为第一个实例中的clicked
在对象范围内,而第二个实例中它在函数范围内。this.click = function
也在功能范围内,但click: function () {
的内容在不同的范围内。
对于第一个工作示例,您可以使用:
console.log(this.clicked);
如果您重写第二个示例:,您也可以看到相同的行为
var Func_button = function() {
this.clicked = 1;
this.click = function() {
console.log(clicked);
};
}
现在,func.clicked
将返回1
,但调用func.click()
将导致相同的错误。
相关文章:
- 为什么 Google 闭包编译器会重命名对象的属性名称
- JSHint 错误“对象不支持此属性或方法”用于 javascript 闭包
- Javascript对象/闭包
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 对象的闭包编译器问题
- JavaScript中带有构造函数的对象和闭包之间的区别
- 如何在 Google 闭包编译器中指定对象类型的@param @return
- Google 闭包编译器中的“全局此对象的危险使用”警告
- 这个 getter-setter 闭包是否有充分的理由以这种方式在其内部对象中声明它是私有的
- 测试对象是否是 Google 闭包类框架中接口的实现
- 如果闭包的行为类似于对象,它们是对象吗?(好像不像)
- JavaScript闭包:在对象中动态存储组失败
- 如何强制 Google 闭包编译器重命名方法,即使使用对象也是如此
- 仅在闭包中定义的模拟/存根对象
- 对闭包内对象的赋值的行为类似于指针
- 从 JavaScript 闭包中访问对象的值
- JQuery 通过闭包绑定到对象方法
- Javascript中对象和闭包的有趣和奇怪的行为
- Javascript 闭包(使用参数名称在同一函数中定义对象)
- 闭包对象创建:这两种方法的优点/缺点是什么