JavaScript:对象问题
JavaScript: problem with object
我正在编写一个小定时器。代码如下:
var counter = {
seconds: 100,
clock: function () {
$('input').val(this.seconds);
this.seconds -= 1;
setTimeout(this.clock(), 1000);
}
};
counter.clock();
和http://jsfiddle.net/4ktEG/
上的工作示例每次我运行代码,我得到一个不同的答案。有什么问题吗?
这是你正在寻找的倒计时。
var counter = {
seconds: 100,
clock: function () {
$('input').val(this.seconds);
this.seconds -= 1;
setTimeout(function(){counter.clock()}, 1000);
}
};
counter.clock();
http://jsfiddle.net/4ktEG/13/jQuery有jQuery.proxy()
[docs]方法来绑定this
的值。
setTimeout($.proxy(counter,'clock'), 1000);
$.proxy
将返回一个调用counter.clock
的函数,并将counter
绑定为this
的值。
或者您可以像这样使用它来永久绑定counter
和counter.clock
:
var counter = {
seconds: 100
};
counter.clock = $.proxy( function () {
$('input').val(this.seconds);
this.seconds -= 1;
setTimeout(this.clock, 1000);
}, counter);
counter.clock();
例子: http://jsfiddle.net/bmYAN/
如果你想让输入显示"100",然后在setTimeout被调用时消失,那么你必须去掉this.clock()上的括号"
因此:
var counter = {
seconds: 100,
clock: function () {
$('input').val(this.seconds);
this.seconds -= 1;
setTimeout(this.clock, 1000);
}
};
counter.clock();
当你说
setTimeout(this.clock(), 1000); //the clock method will be called right away.
用这个代替
setTimeout(this.clock, 1000);
使用说明:
var counter = {
seconds: 100,
clock: function () {
$('input').val(counter.seconds);
counter.seconds -= 1;
setTimeout(counter.clock, 1000);
}
};
counter.clock();
你在函数中使用了"this",你想要的是指向"counter"对象。
超时将在全局上下文中执行。因此,处理程序中的'this'将引用全局上下文。您必须将函数绑定到所需的上下文以实现所需的结果。查看function.call
或function.apply
,它们接受上下文参数。
var counter = {
seconds: 100,
clock: function () {
$('input').val(this.seconds);
this.seconds -= 1;
var closure = function() {
counter.clock.call(counter);
};
setTimeout(closure, 1000);
}
};
counter.clock();
相关文章:
- JavaScript代码问题:我正在将对象转换为数组
- jquery$(this)对象缺少问题
- JavaScript对象继承问题
- 在对象中添加方法时出现问题
- 基本对象/原型语法问题
- Javascript对象文字,POST问题
- 使用Javascript对象为具有两个背景图像的DIV设置样式时出现问题
- 使用.map解析JSON对象时出现问题
- 类中对象的奇怪问题(John Resig简单继承)
- 访问Javascript对象-Node.js的作用域问题
- JavaScript对象中存在数组的问题
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- JavaScript—父类和子类/对象的此问题
- 我该如何解决这个问题;参考网格”;在JavaScript中完成的对象数
- jQuery拖动到相对位置的可排序列表中时出现可拖动辅助对象位置问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 创建jQuery对象时出现问题
- 面向对象,控制器问题,初学者Javascript
- 从 JSON 对象获取数据时出现问题
- Rails的问题,haml + javascript在字段对象的模糊