setTimeout在类中使用的问题!

我现在的做法,但我不想这样写:

function calendar(name){
this._name = name;
}
calendar.prototype.thread=function(){
this._timeout = setTimeout(this._name + ".thread_result()", 200);
}
calendar.prototype.thread_result=function(){
alert("执行成功!");
}
var calendar1;
onload=function(){
calendar1 = new calendar("calendar1");

calendar1.thread();
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

我希望能做到创建calendar时,不需要把calendar1传入,在setTimeout参数里,直接可以通过this.thread_result()执行

function calendar(){
}
calendar.prototype.thread=function(){
this._timeout = setTimeout("this.thread_result()", 200);
}
calendar.prototype.thread_result=function(){
alert("执行成功!");
}
onload=function(){
var calendar1 = new calendar();

calendar1.thread();
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

幻宇前辈不在 我先来现一把拙:)

function calendar(){
this.str="执行成功";
}
calendar.prototype.thread=function(){
var temp=this;
this._timeout = setTimeout(function(){temp.thread_result()}, 200);
}
calendar.prototype.thread_result=function(){
alert(this.str);
}
onload=function(){
var calendar1 = new calendar();
calendar1.thread();
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

这个问题难就难在让函数中的this指向正确
对,winter老弟的方法不错,唯一的问题是函数中的this指针有问题,我已经找到解决方法了,给Function对象添加了原型函数bindNode进行绑定,可以让this指向任意对象

Run

Function.prototype.bindNode=function(oNode){
var foo=this,iNodeItem
if(window.__bindNodes==null)
__bindNodes=[]
__bindNodes.push(oNode)
iNodeItem=__bindNodes.length-1
oNode=null
return function(e){
foo.call(__bindNodes[iNodeItem],e||event)
}
}
btTest.onclick=function(){
alert(this.tagName==null?"tagName="+this.tagName+"(普通情况下,this指向当前函数)":"tagName="+this.tagName+"(经过bindNode处理后,this可以指向任意传过来的对象)")
}

window.setTimeout(btTest.onclick,100)
window.setTimeout(btTest.onclick.bindNode(btTest),200)

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

To 幻宇:
我一楼帖的this也是正确的 只不过代码难看了点:)  


添加f1添加f2添加f3

移除f1移除f2移除f3

function FunctionArray()
{
var functions=new Array();
var FA=function (){
for(var i=0;i

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

关于绑定事件的问题 我的做法是自己写一个函数数组
我自己感觉这样更加原生态一些 请指点一下^^

(0)

相关推荐

  • Javascript延迟执行实现方法(setTimeout)

    1.延迟切换tab 需求:页面上有几个tab,切换tab的时候,会对某个特定区域的数据进行拉取更新. 弊端:用户从第一个tab切换一直快速切到尾,就会产生n个ajax请求.其实用户只是需要看到最后一个tab的数据. 复制代码 代码如下: var changeTab = function(){ var timeId = 0; return function(tabId){ if(timeId){ clearTimeout(timeId); timeId=0; } setTimeout(functi

  • Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)

    Document自带的方法: 循环执行:var timeid = window.setInterval("方法名或方法","延时");window.clearInterval(timeid); 定时执行:var tmid = window.setTimeout("方法名或方法", "延时");window.clearTimeout(tmid); 举例说明: A.当要执行的方法中不需要参数时 复制代码 代码如下: <scr

  • jQuery中setTimeout的几种使用方法小结

    我们通过例子来说明一下jQuery中setTimeout的几种使用方法, 首先准备好测试用的DIV和公共函数: 复制代码 代码如下: <div id="div_debug"></div> <script src="http://www.studyday.net/demo/jquery.js"></script>  <script language="JavaScript">  funct

  • setInterval和setTimeout停止的方法

    先来了解 setInterval : 1,HTML DOM setInterval() 方法 定义和用法 setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭.由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数. 语法 setInterval(code,millisec[,"lang"]) 参数 描述

  • JS延迟加载(setTimeout) JS最后加载

    第一 JS延迟加载 复制代码 代码如下: <script language="JavaScript" src="" id="my"></script> <script> setTimeout("document.getElementById('my').src='include/common.php'; ",3000);//延时3秒 </script> 一般情况下都是利用setT

  • Javascript对象中关于setTimeout和setInterval的this介绍

    在Javascript里,setTimeout和setInterval接收第一个参数是一个字符串或者一个函数,当在一个对象里面用setTimeout延时调用该对象的方法时 复制代码 代码如下: function obj() { this.fn = function() { alert("ok"); console.log(this); setTimeout(this.fn, 1000);//直接使用this引用当前对象 } } var o = new obj(); o.fn(); 然后

  • Jquery中使用setInterval和setTimeout的方法

    方法1. 应用jQuery的扩展可以解决这个问题. 复制代码 代码如下: $(document).ready(function(){$.extend({  show:function(){   alert("ready");  }});setInterval("show()",3000);}); 方法2. 指定定时执行的函数时不要使用引号和括号. 复制代码 代码如下: $(function(){function show(){   alert("ready

  • setTimeout和setInterval的浏览器兼容性分析

    无意中测试AJAXRequest浏览器兼容性的时候,发现AJAXRequest.update方法在某些情况下在IE里有问题,经过测试找到是setTimeout和setInterval的问题. 问题出现在当调用AJAXRequest.update方法时,如果带了更新间隔及更新次数,那么在IE下面就会出现问题,具体表现为带了更新间隔时是函数工作,带上更新次数时函数无法在更新指定次数后停止执行. 测试几个例子之后找到了问题所在,在IE里,setTimeout和setInterval是不支持参数传递的.

  • JavaScript setTimeout和setInterval的使用方法 说明

    不同的是setInterval会每隔指定的时间段就执行一次代码,具有重复性.而setTimeout只会调用后执行一次. 下面通过函数的建立和函的自动删除来深刻理解两个函数: 1.函数的建立 setTimeOut的建立: 复制代码 代码如下: showTime(); function showTime() { var today = new Date(); alert("The time is: " + today.toString()); setTimeout("showTi

  • setTimeout与setInterval在不同浏览器下的差异

    .(新手可能认为setTimeout与setInterval是javascript函数,这是错误的.新手容易将javascript对象函数与DOM对象方法混淆.) 先来一段代码,大家猜猜在各种浏览器下的结果会是怎么样的呢? 复制代码 代码如下: function f(){ var s = 'arguments.length:'+arguments.length+'; '; for(var i=0,n=arguments.length;i< n;i++){ s += ' ['+i+']:'+arg

  • javascript setTimeout和setInterval 的区别

    setTimeout方法是定时程序,也就是在什么时间以后干什么.干完了就拉倒. setInterval方法则是表示间隔一定时间反复执行某操作. 如果用setTimeout实现setInerval的功能,就需要在执行的程序中再定时调用自己才行.如果要清除计数器需要 根据使用的方法不同,调用不同的清除方法: 例如: tttt=setTimeout('northsnow()',1000); clearTimeout(tttt); 或者: tttt=setInterval('northsnow()',1

  • 在window.setTimeout方法中传送对象

    其语法是: window.setTimeout(expr,msec) expr是执行字符串,在msec毫秒之后,就会作为js运行.我昨天才发现,原来expr也可以是一个函数,呵呵,用这个特性,就可以进行对象的传送了.     下面的代码实现了把函数foo1中的对象p,延时传送到函数foo2中的功能.  foo1() function foo1(){ var p={x:3,y:4} window.setTimeout(function(){foo2(p)},100) } function foo2

  • 在Javascript类中使用setTimeout第1/2页

    最近遇到了一道 Javascript 考题,内容如下: 尝试实现注释部分的 Javascript 代码,可在其他任何地方添加更多 代码(如不能实现,说明一下不能实现的原因): var Obj = function(msg){    this.msg = msg;    this.shout = function(){       alert(this.msg);    } this.waitAndShout = function(){       // 隔五秒钟后执行上面的 shout 方法  

  • setTimeout的延时为0时多个浏览器的区别

    由于不是很了解浏览器的内部执行策略,本文只能是通过前端一些测试依稀猜测些结论: 1)测试举例 做了两个例子: 1-1)脚本在页面中直接执行,通过刷新看结果 复制代码 代码如下: <!DOCTYPE HTML> <HTML> <HEAD> <script type="text/javascript"> var t=new Date; setTimeout(function(){ alert('cost time:'+(new Date-t)

  • JS中setTimeout()的用法详解

    setTimeout setTimeout 语法例子 用 setTimeout 来执行 function 不断重复执行的 setTimeout 设定条件使 setTimeout 停止 计分及计秒的 counter clearTimeout Set flag 1. SetTimeOut() 1.1 SetTimeOut()语法例子 1.2 用SetTimeOut()执行Function 1.3 SetTimeOut()语法例子 1.4 设定条件使SetTimeOut()停止 1.5 计分及秒的co

  • Js中setTimeout()和setInterval() 何时被调用执行的用法

    定义setTimeout()和setInterval()经常被用来处理延时和定时任务.setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则可以在每隔指定的毫秒数循环调用函数或表达式,直到clearInterval把它清除.从定义上我们可以看到两个函数十分类似,只不过前者执行一次,而后者可以执行多次,两个函数的参数也相同,第一个参数是要执行的code或句柄,第二个是延迟的毫秒数.很简单的定义,使用起来也很简单,但有时候我们的代码并不是按照我们的想象

  • JavaScript window.setTimeout() 的详细用法

    js的setTimeout方法用处比较多,通常用在页面刷新了.延迟执行了等等.但是很多javascript新手对setTimeout的用法还是不是很了解.虽然我学习和应用javascript已经两年多了,但是对setTimeout方法,有时候也要查阅资料.今天对js的setTimeout方法做一个系统地总结. setInterval与setTimeout的区别 说道setTimeout,很容易就会想到setInterval,因为这两个用法差不多,但是又有区别,今天一起总结了吧! setTimeo

  • js setTimeout实现延迟关闭弹出层

    #flyout { border: solid 2px Gray; background-color: #FFF999; width: 300px; height: 100px; display: none; } var flyoutTimer; function mouseOutEvent() { //Hide flyout after 1 second when the mouse move out of the flyout zone flyoutTimer = setTimeout(hi

  • jQuery setTimeout()函数使用方法

    setTimeout()从载入后延迟指定的时间去执行一个表达式或者是函数;仅执行一次 ;和window.clearTimeout一起使用. 我在 复制代码 代码如下: $(document).ready(function(){setTimout(test(),200); function test() { alert(1); } }); 只会执行一次,有朋友说可以使用 复制代码 代码如下: setInterval ("showTime()", 5000);function showTi

  • setTimeout和setInterval的区别你真的了解吗?

    甚至可能会错误的把两个实现定时调用的函数理解成了类似thread一样的东西, 认为会在一个时间片内, 并发的执行调用的函数, 似乎很好很强大, 但其实并不是如此, 实际的情况是javascript都是以单线程的方式运行于浏览器的javascript引擎中的, setTimeout和setInterval的作用只是把你要执行的代码在你设定的一个时间点插入js引擎维护的一个代码队列中, 插入代码队列并不意味着你的代码就会立马执行的,理解这一点很重要. 而且setTimeout和setInterval

随机推荐