javascript中this关键字之我见

javascript中的this关键字是个很令人头疼的问题,学习的时候也是个难点,觉得这个东西很玄乎,很乱;

下面是我个人的一点观点:

首先我们来看看直接定义的全局函数:

function introduce() {
     alert("Hello, I am limeng");
}

这个函数的this指向谁呢?

定义在全局的函数,其实也就是window对象的一个方法,函数的所有者就是当前页面,也就是window对象,我们alert一下看看:

var name = "Hello, I am limeng";
function introduce() {
     alert(this.name);
}
window.onload = introduce; 

/*out:
  *Hello, I am limeng
  */

我们在alert一下:

var name = "Hello, I am limeng";
function introduce() {
     alert(this.name);
}

alert(window.introduce); 

/*out:
  *function introduce() {
  *   alert(this.name);
  *}
  */

很显然,跟我们预期的一样。

下面我们看看事件处理函数:

<input id="name" type="button" value="limeng" />
function showValue() {
     alert(this.value);
}
window.onload = function(){
 document.getElementById(‘name‘).onclick = showValue;
} 

/*out:
  *limeng

  */

此时的全局函数中的this为什么不是window了呢?

其实在对onclick绑定的时候, 其实是对id为name的输入框Dom对象的onclick属性的赋值。而onclick的所有者就是这个dom对象。

再看:

function showValue() {
     alert(this.value);
}
window.onload = function(){
 document.getElementById(‘name‘).onclick = showValue;
 alert(document.getElementById(‘name‘).onclick);
} 

 /*out:
  *function showValue() {
  *  alert(this.value);
  *}

  */

所以,当事件触发的时候,就会去调用name按钮的onclick方法,,这个时候this关键字自然就指向的是name按钮了。

即:对象的方法中this指的就是该对象。

再看:

<input id="name" type="button" value="limeng" onclick="showValue();" />

此处出错了,为什么呢?

因为这个时候并不是赋值,而是引用。我们弹出一下onclick看看:

alert(document.getElementById(‘name‘).onclick);

 /*out:
  *function onclick() {
  *  showValue();
  *}

  */

应该能明目为什么会了吧。

而对于不是事件处理函数的场合,我们可以使用apply,或者call,来改变this关键字的指向。

不过本人目前对apply和call了解的还不够多。简单说一个例子吧:

 var limeng = {
     name : ‘limeng‘,
     age  : 26
 };
 
 function introduce() {
     alert(this.name);
 }

 introduce.call(limeng);
时间: 2024-08-26 20:26:24

javascript中this关键字之我见的相关文章

Javascript中的关键字和保留字

ECMA-262中描述了一组具有特定用途的关键字,可用于表示控制语句的开始或结束,或者用于执行特定操作等.规定:关键字属于语言保留,不可以用于标示符. ECMAScript的全部关键字(*为第五版新增): break do instanceof typeof case else new var catch finally return void continue for switch while debugger*   function this with default if throw de

JavaScript中this关键字的使用比较

JavaScript中this关键字的使用比较 this关键字在JavaScript中,用的不能说比较多,而是非常多.那么熟悉this关键字的各种用法则显得非常关键. this有时候就是我们经常说的上下文,这个东西的指代对象.它灵活多变,有时候你看它是对象,有时候是window宿主对象. 1.this指向宿主对象 function myWindow() { this.id = 1; // 等价于window.id = 1 console.log(this); // 这里的this就是window

深入解析Javascript中this关键字的使用

深入解析Javascript中面向对象编程中的this关键字 在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如: function TestFunction(){ this.demoVal='This is a demo variable'; }; 随着函数使用的场合不同,this的值会发生改变.但是有一个总的原则:this指的是调用函数的那个对象. 接下来分情况讨论this关键字的使用: 1. 纯粹的函数调用(这是函数的通常用法,属于全局性

Javascript中this关键字详解

原文出处:http://www.cnblogs.com/justany/archive/2012/11/01/the_keyword_this_in_javascript.html Quiz 请看下面的代码,最后alert出来的是什么呢? 1 var name = "Bob"; 2 var nameObj ={ 3 name : "Tom", 4 showName : function(){ 5 alert(this.name); 6 }, 7 waitShowNa

JavaScript中var关键字的使用详解

作用 声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? 1 2 3 4 5 6 7 8 <script type="text/javascript">   function Define() {     a = 2;   }   function Hello() {     alert(a);   } </script>

JavaScript中this关键字的理解

this是个什么鬼? this是JavaScript中的一个关键字,代表当前对象. this在那些情况下会指向谁?如下文. 一.调用全局变量(Global Variable) var x="我是全局变量呦"; function obj() { alert(this.x); } obj(); //我是全局变量呦 此时,this指向了全局变量x. 二.将this作为对象的方法来调用. function test() { alert(this.x); } var obj={}; obj.x=

Javascript中的this之我见

来源:http://www.blogjava.net/baoyaer/articles/105864.html 在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如C++.C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的.JavaScript也提供了这个this关键字,不过用起来就比经典OO语言中要"混乱"的多了. 下面就来看看,在JavaScript中各种this的使用方法有什么混乱之处? 1.在HTML元素事件

深入了解JavaScript中的关键字

this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,下面分四种情况,详细讨论this的用法,感兴趣的朋友可以了解下. this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, 复制代码代码如下: function test(){ this.x = 1; } 随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是,调用函数的那个对象. 下面分四种情

对于JavaScript中this关键字的理解

这是我第二遍学this了,第一遍学的懵懵的.this指哪里都是凭我一个男人的直觉然后控制台输出看看对不对. 刚查了书.博客.视频.理解差不多了.毕竟菜鸡me: 一.首先介绍下什么是this this是一个标识符,它需要和值进行绑定,和变量差不多:但是在你的代码中,它不是和某个具体的值进行绑定.而是绑定到正确的对象上,一般来说参数究竟绑定在哪个对象上都是由定位函数参数规则所决定的. 二.this对象是在运行时基于函数的执行环境绑定的,当函数被作为某个对象的方法调用时,this等于那个对象. 代码一