`
wh8766
  • 浏览: 35703 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript类中作用域,setInterval

阅读更多
自己会接触到很多JavaScript了..放到新的归类里~

如题
在一个类中某个方法调用setInterval,回调类中另一个方法时出现的问题
这里参考了前辈的解决方式:
/**
*开始闪烁
*关于回调作用域的帖子:http://www.cnitblog.com/CoffeeCat/archive/2008/03/07/35095.html
**/
FlashTimer.prototype.startFlash = function(){
		if (!this.customLayer){alert("customLayer为空");return;}
		this.markers = this.customLayer.markers;
		this.lines = this.customLayer.lines;
		this.polygons = this.customLayer.polygons;
		var _this = this;					//当使用Windows.seInterval方法时,回调的函数会被作为一个window下的成员, 会提示不存在这样的方法
		var callFlashing = function (){_this.flashing();}		//这里通过调用这个方法
		this.timerID = window.setInterval(callFlashing, this.period);
	}

/**闪中。。*/
FlashTimer.prototype.flashing = function(){
	//alert(this + " , " + this.markers);
		if (this.isVisible){	//已经显示
			this.hideAllObject();
			this.isVisible = false;
	
		}else{	//已经不显示了
			this.showAllObject();
			this.isVisible = true;		
	}
}


在没有改进代码前会报调用对象方法中的属性为空,可以试着在被回调方法中alert(this)
由此this的作用域发生了改变.

如上,如果单纯的使用flashing方法, 在flashing方法中的this将变成Windows Objects对象,便无法对类中的方法进行访问了.

小记录了一下..
分享到:
评论

相关推荐

    JavaScript内核系列.pdf

    JavaScript中的变量作用域分为全局作用域和函数作用域。全局作用域中的变量在整个程序中都可以访问;而函数作用域内的变量只在其定义的函数内部有效。此外,JavaScript还支持块级作用域,即在代码块(如if语句或循环...

    JavaScript中setTimeout和setInterval函数的传参及调用

    由于JavaScript的词法作用域特性,外部函数的变量在内部函数中依然可访问。因此,我们可以通过创建闭包来传递参数。例如: ```javascript var str = 'aaa'; var num = 2; function test() { var str = 'bbb'; ...

    理解javascript定时器中的setTimeout与setInterval

    由于它们执行的代码是在全局作用域中,因此`this`通常指向`window`对象,这可能与函数内部期望的`this`值不同。例如: ```javascript function shape(name) { this.name = name; this.timer = function(){alert('...

    JavaScript (JS) API 手册

    3. **变量声明与作用域**: JavaScript中的`var`、`let`和`const`关键字用于声明变量,它们有不同的作用域规则,`var`在函数作用域,而`let`和`const`在块级作用域。 4. **函数与闭包**: 函数是JavaScript中的第一类...

    JavaScript书中的源码

    首先,JavaScript的基础知识包括变量、数据类型、操作符、流程控制(如条件语句和循环)、函数以及作用域。源码中可能包含了对这些基本概念的实例演示,比如如何使用var、let和const声明变量,以及如何理解和运用...

    查找并修复JavaScript代码中的问题.zip

    5. **作用域问题**:JavaScript有函数作用域和块级作用域,但没有类作用域。对变量作用域的理解不足可能导致变量污染或其他难以察觉的问题。 6. **事件循环和定时器**:理解Event Loop和setTimeout/setInterval的...

    Javascript中文API

    5. **作用域和闭包**:作用域决定了变量的可见性,全局变量在整个脚本中都可用,而局部变量只在其定义的函数内部可用。闭包是指函数可以访问并操作其外部作用域的变量,即使在其外部函数已经执行完毕后。 6. **事件...

    Professional JavaScript for Web Developers, 3rd Edition 附书中代码

    3. 作用域:书中详细讲解了全局作用域、局部作用域以及闭包的概念,帮助读者理解变量的生命周期和作用范围。 4. 原型与原型链:这是JavaScript实现继承的关键机制,书中会详细阐述如何利用原型实现对象之间的关联。 ...

    javascript中文参考手册

    2. **函数与作用域**:函数是JavaScript中可重用的代码块,可以接受参数并返回值。函数的作用域决定了变量的可见性和生命周期,包括全局作用域和局部作用域。块级作用域由let关键字引入,而const用于声明常量。 3. ...

    JavaScript语言精粹.pdf

    3. 作用域和闭包:解释JavaScript中的作用域(词法作用域和动态作用域)、作用域链、闭包及其在异步编程和模块化中的应用。 4. 异步编程:详细探讨JavaScript中的异步编程模型,包括传统的回调函数、Promise、async...

    JavaScript小技巧全集 JavaScript教程 JavaScript源代码集

    此外,JavaScript还有闭包(Closure)的概念,它允许函数访问并操作其外部作用域的变量,即使在其定义的作用域之外。 描述中的“跑马灯”和“自动滚屏阅读式公告栏”是JavaScript实现动态效果的实例。这些可以通过...

    107个javascript常用语句

    9. **作用域**:JavaScript有全局作用域和局部作用域,`var`声明的变量在函数内部可提升到全局,而`let`和`const`则有块级作用域。 10. **闭包**:闭包是指有权访问另一个函数作用域中的变量的函数,它可以记住并...

    js.rar_JAVASCRIPT面试题_javascript

    - 作用域:区分全局作用域、局部作用域(函数作用域)和块级作用域(let, const)。 - 闭包:理解闭包的原理,如何创建闭包,以及闭包在内存管理中的作用。 4. **异步编程** - 回调函数:了解回调地狱及其问题,...

    JavaScript中文手册+核心手册

    此外,还包括了作用域、闭包、原型链、异步编程(回调函数、Promise、async/await)等高级主题。理解这些内容能帮助开发者编写出高效且易于维护的代码。 2. **JavaScript核心参考手册**: 核心参考手册通常会更...

    JavaScript权威指南(第6版)

    2. **对象与作用域**:JavaScript中的对象是其核心特性之一,书中有详细讲解如何创建和操作对象,包括字面量语法、构造函数、原型链以及闭包等概念。同时,书中也涵盖了作用域规则,包括全局作用域、局部作用域和...

    Javascript征途

    函数是JavaScript的核心组成部分,书中的章节会深入讨论函数的定义、调用、作用域以及闭包等概念。同时,也会介绍箭头函数这一ES6的新特性,使得函数的写法更为简洁。此外,函数式编程的思想和实践在JavaScript中也...

    javascript经典实例源码

    7. **闭包**:闭包是JavaScript中一个高级特性,允许函数访问和操作其外部作用域的变量,即使在其外部作用域已经结束之后。 8. **定时器和延迟操作**:setTimeout和setInterval用于在特定时间后执行函数,理解它们...

Global site tag (gtag.js) - Google Analytics