`
focus2008
  • 浏览: 27541 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

深入理解javascript语言中的this

阅读更多
说到js中的函数中的this指针,就像是悟空的毫毛一样,可以随时变来变去,理解起来十分困难,但是万变不离其宗,都是悟空的毫毛而已 ^-^.

要中文js中的this,只要记住一点:谁调用了该函数,那么该函数中的this就是指的它;如果没有看出是谁调用的,那么就是window调用的,因为只有它有这个权利。下面结合例子来理解:

例子1:
function F(){
	function C(){
		return this;
	}
	return C();
}

var o = new F();
console.log(o);   // 打印 Window
console.log(window);  // 打印 Window

上面函数C中的this指针是执行 o 吗?
首先我们看,对象 o 调用了 函数 C() 吗?没有吧,对象 o 没有做任何事情!所以C中的this指针不是指向 o ,而是widow。这里其实可以看做是 window 调用 “new F()”,所以this指针是window,而不是 o ,因为o 并没有调用任何方法。

例子2:
var fullname = 'focus2008';
var obj = {
	fullname:'yuanfang',
	prop:{
		fullname:'direnjie',
		getfullname:function(){
			return this.fullname;
		}
	}
};
console.log(obj.prop.getfullname());	// direnjie
var test = obj.prop.getfullname;	// focus2008
console.log(test());

上面的结果有这么理解呢?
1)因为obj 是一个对象,但是 prop 也是一个对象,所以第一个直接调用 getfullname()的是prop,所以打印的是 direnjie, 而不是 yuanfang
2)第二个 test 是一个全局变量,他的值是一个函数地址,test()调用其实就是:window.test(),所以打印的是全局的fullname,也就是 window.fullname;
如此而已。

关于call和apply会改变函数的调用者,所以也就改变了函数中的this指针。
0
2
分享到:
评论

相关推荐

    深入理解JavaScript系列(13) This? Yes,this!

    总之,理解JavaScript中的this关键字需要对执行上下文、函数调用方式、以及函数如何被定义和使用有深入的认识。通过本文对this关键字的分析,我们可以得到一个更加清晰和全面的理解,并在实际开发中更加自如地运用。

    深入理解JavaScript系列

    ### 深入理解JavaScript系列知识点详析 #### 一、编写高质量JavaScript代码的基本要点 在这一章节中,汤姆大叔主要介绍了编写高质量JavaScript代码的关键要素。这些要素不仅包括了语法层面的最佳实践,还涉及到了...

    JavaScript语言中this指向研究 (1).pdf

    JavaScript中的`this`关键字是一个非常重要的概念,它在不同上下文中具有不同的指向,这使得理解和掌握`this`的用法成为JavaScript开发中的关键点。在本文中,我们将深入探讨`this`在全局变量、函数、对象、构造函数...

    JavaScript语言精粹 pdf

    - **原型链**:深入理解JavaScript中的原型链机制,明白对象继承的原理。 - **this关键字**:掌握this在不同上下文中指向的对象,理解其作用于函数调用模式的变化。 #### 3. 高级特性 - **异步编程**:学习事件循环...

    JavaScript 语言精粹

    此外,《JavaScript语言精粹》还会深入讨论作用域、变量提升、this关键字、事件处理、DOM操作以及异步编程,如回调函数、Promise和async/await。这些知识点对于前端开发人员来说至关重要,因为它们直接影响到网页的...

    深入理解JavaScript作用域共12页.pdf.zip

    本资料"深入理解JavaScript作用域共12页.pdf"将详细探讨这一主题。 在JavaScript中,作用域主要有两种类型:全局作用域和局部作用域。全局作用域的变量在整个脚本中都是可访问的,而局部作用域的变量只在其声明的...

    JavaScript this 深入理解

    总之,深入理解JavaScript的`this`机制对于编写高效、可维护的代码至关重要。通过区分调用者和所有者,以及掌握`apply`和`call`的用法,我们可以更好地控制函数执行时的上下文,从而实现更复杂的编程模式。

    深入理解JavaScript特性1

    《深入理解JavaScript特性1》是一本面向前端开发者和JavaScript编程爱好者的指南,旨在帮助读者掌握JavaScript语言的新进展,特别是ECMAScript 6 (ES6)引入的诸多特性。书中通过丰富的实例,逐步解析了JavaScript的...

    深入理解javascript原型和闭包1

    JavaScript是一种动态类型的...通过这些深入的讲解,你应该能更好地理解JavaScript中对象、原型、函数和闭包的工作原理,为你的JavaScript开发打下坚实的基础。在实际编程中,灵活运用这些知识可以解决许多复杂的问题。

    JavaScript中this关键字使用方法详解

    在JavaScript编程语言中,`this`关键字是一个至关重要的概念,它常常引发初学者的困惑,因为它的值在不同的上下文中可能会有所不同。`this`关键字主要用来引用对象的上下文,或者说是当前执行环境中的对象。在本文中...

    深化理解Javascript中this的作用域_.docx

    在JavaScript中,`this`关键字的作用域是一个经常让人困惑的主题,尤其对于那些习惯于其他面向对象语言...在实际开发中,深入理解`this`的作用域和它如何根据上下文变化,将有助于写出更安全、更可靠的JavaScript代码。

    JavaScript核心(对象、原型、继承、上下文、闭包、this).pdf

    ECMAScript是一种高度抽象的面向对象语言,其核心特性是基于对象的交互方式。在ECMAScript中,基本类型在需要的时候会被转换成对象。对象是一个属性集合,...理解这些概念对于深入学习和使用JavaScript语言至关重要。

    JavaScript 语言参考 中文版

    2. **字母顺序的关键字列表**:关键字是JavaScript语言中预定义的保留词汇,如`break`, `case`, `catch`, `class`, `const`, `continue`, `debugger`, `default`, `delete`, `do`, `else`, `enum`, `export`, `...

    深入理解Javascript中this的作用域

    总的来说,理解JavaScript中的`this`作用域关键在于识别调用上下文,即`this`的值取决于函数被调用的方式。这包括全局调用、作为对象方法调用、事件处理以及使用`.call()`、`.apply()`或`.bind()`等方法。熟悉这些...

    详解Javascript 中的this指针

    在深入探讨`this`指针之前,我们首先应当明确`this`在JavaScript中的基本概念与作用。`this`关键字在JavaScript中扮演了一个非常核心的角色,它是一个特殊的变量,用于引用调用当前函数的对象。`this`的值并不是静态...

    JavaScript语言精粹.源代码

    《JavaScript语言精粹》是一本深受开发者喜爱的经典书籍,它深入浅出地讲解了JavaScript的核心概念和技术,帮助读者掌握这门语言的精髓。下面,我们将详细探讨这本书中涉及的一些重要知识点,并结合源代码"example_...

    详细讲解JavaScript中的this绑定

    `this`在JavaScript中并不像其他语言中的`this`那样简单地指向对象本身,而是根据函数调用的方式动态确定其指向。理解`this`的工作方式对于编写高质量的JavaScript代码至关重要。 1. **默认绑定**: - 当函数被...

    javascript 中关于 this 的用法.zip

    在JavaScript编程语言中,"this"关键字是一个至关重要的概念,它用于引用对象的上下文,尤其是在函数调用时。理解this的用法是提升JavaScript技能的关键。本篇将深入探讨JavaScript中的this用法,帮助你更好地掌握这...

    Linux 桌面玩家指南:19. 深入理解 JavaScript,及其开发调试工具 - 京山游侠 - 博客园1

    【深入理解JavaScript及其开发调试工具】 JavaScript是一种广泛用于网页和网络应用的编程语言,它主要负责客户端的交互逻辑,使得网页动态化、响应用户操作。本文将深入探讨JavaScript的核心概念,包括对象和原型链...

Global site tag (gtag.js) - Google Analytics