快乐十分20选8技巧 www.6qljx.cn 在js的类内部,可以通过this访问本身,但是,javascript中的定时器函数setTimeout和setInterval后面的参数是函数名字符串,也就是要setInterval(“func”,delay)或者setTimeout(“func”,delay)。虽然是在类内部设置定时器(timer),但是对于这两个函数,在类的内部也是一样,必须把它看成是在外部调用一样。

在外部调用的话就比较简单了: setInterval(“objname.func()”,delay)或者setTimeout(“objname.func()”,delay)就可以了。但是问题就出在这里了,我们在类内部并不知道所创建的对象的名字,对象的名字只有在创建了之后才可以得到。

下面举一个简单的例子

function Car(){
    if (typeof Car._initialized == "undefined") {
        Car.prototype.drive = function() {
            alert('Drive');
        }

        Car._initialized = true;
    }
    setTimeout("this.drive()",1000);
}
var car = new Car();

运行后,你会得到一个错误

Uncaught TypeError: Object [object global] has no method 'drive'

下面的代码将在类内部获取到当前所创建对象,具体如下

//产生一个随机的字符串用做ID,这里用"obj_"加时间戳的方式
this.id="obj_"+new Date().getTime();
//这一句eval就相当于在obj_xxx(这是外部的变量)=this(对象本身)
eval(this.id+"=this");

修改后的类如下:

function Car(){
    //产生一个随机的字符串用做ID,这里用"obj_"加时间戳的方式
    this.id = "obj_"+new Date().getTime();
    //这一句eval就相当于在obj_xxx(这是外部的变量)=this(对象本身)
    eval(this.id+"=this");
    if (typeof Car._initialized == "undefined") {
        Car.prototype.drive = function() {
            alert('Drive');
        }

        Car._initialized = true;
    }
    setTimeout(this.id+".drive()",1000);
}
var car = new Car();

在javascript的类中加入上面的代码后,此时外部声明了一个var objname=new someClass,那么这个obj_xxx也就指向objname了,对于上面的代码来说,Car类中的this.id就指向外部的变量car了。

转载请注明:快乐十分20选8技巧 » js类内部定时器如何调用类内部函数

1访客评论

  1. 茅塞顿开啊,等于拿时间戳这个全局变量保存了实例本身

    Rainsho08-24 18:04 回复

我来说说

(便于我们更好的交流)

有不明白的地方欢迎留言哦~
取消
  • 辽宁:电商成为精准扶贫的“利器” 2018-09-14
  • 鄱阳湖花海:文明仍应成为最美风景 2018-09-14
  • 时间放宽了,考核更难了 2018-07-26
  • 新时代 新作为 新篇章 2018-07-25
  • 大厨风范的海鲜做法,小白也能学会,鲜美营养,好吃到哭 2018-07-25
  • 我老张工可没有笑博士的野心,但自信有笑博士无法企及的本事。科学技术支持计划经济,在计划经济下,资源的配置和需要是计划的,无需个人去过多地操心。个人对社会,主要是 2018-07-25
  • 企业党建--安徽频道--人民网 2018-07-25
  • 无论谁说自己的理论是马克思主义理论都不算数,只有他的理论符合客观事实及其规律才是真理,否则便是谬误。 2018-07-24
  • 宝宝反复喉鸣 当心喉软骨发育不良 2018-07-24
  • 持续发力!又有三家微信公众号被吕梁市网信办约谈 2018-07-24
  • 向“份子钱”开刀 广州的士再改革 2018-07-24
  • 河北加强扬尘整治:全面推行“以克论净”考核标准 2018-07-23
  • 习近平会见塔吉克斯坦总统拉赫蒙 2018-07-23
  • 电子商务法草案三审:微商纳入经营者范围,个人二手转让不算 2018-07-22
  • 2018年北京高考阅卷21万份 23日发布成绩 2018-07-22
  • 462| 642| 964| 793| 405| 593| 615| 748| 276| 625|