对于JavaScript中this关键字的理解

  这是我第二遍学this了,第一遍学的懵懵的。this指哪里都是凭我一个男人的直觉然后控制台输出看看对不对。

  刚查了书、博客、视频。理解差不多了。毕竟菜鸡me;

一、首先介绍下什么是this

  this是一个标识符,它需要和值进行绑定,和变量差不多;但是在你的代码中,它不是和某个具体的值进行绑定。而是绑定到正确的对象上,一般来说参数究竟绑定在哪个对象上都是由定位函数参数规则所决定的。

、this对象是在运行时基于函数的执行环境绑定的,当函数被作为某个对象的方法调用时,this等于那个对象。

代码一

1 var name = "全局";
2 var obj = {
3     name : "object",
4     getNameFunc : function() {
5         console.log(this.name);
6     }
7 };
8 obj.getNameFunc();

、相同的在全局函数是this就是window;但是匿名函数的执行环境的执行环境具有全局性所以代码2就有的解释啦

代码二

 var name = "全局";
 var obj = {
     name : "object",
     getNameFunc : function() {
        return function(){
            console.log(this.name);
            };
    }
};
 obj.getNameFunc() ();

四、在JavaScript高程中作者说每个函数在调用时都会自动取得两个变量:this和argutments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止。因此永远不可能直接访问外部函数的这两个变量。把外部作用域中的this对象保存在一个闭包能访问到的地方;如代码三

代码三

 1  var name = "全局";
 2  var obj = {
 3      name : "object",
 4      getNameFunc : function() {
 5         var biubiu =this;
 6         return function(){
 7             console.log(biubiu.name);
 8             };
 9     }
10 };
11  obj.getNameFunc() ();

五 ;总结

  关键词this使得我们可以仅创建一个函数对象,就可以将其作为方法用在一些其他的对象上,每次我们调用该方法时它便可以调用他的对象。对于节省内存十分有用。

这都是因为this得以实现。(我也不大懂Twitter前培训主管视频中看到的。)

六、练习

预测this

var fn = function(one, two){
    log(this, one, two);
};
var r ={ }, g = {}, b = {};
r.method = fn;
r.method(g,b);

答案是: r 对象。g,b  是one ,two。没疑问吧。r点method 这个是对象吧。对象this

当函数被作为某个对象的方法调用时,this等于那个对象。

var fn = function(one, two){
    log(this, one, two);
};
var r ={ }, g = {}, b = {};
r.method = fn;
fn(g,b);

答案是全局:因为这次不是作为函数调用

var x = "我是全局变量";    //定义全局变量x
function a(){         //定义函数类结构a
    this.x = "我是在函数类结构a中声明的哦";
}
//定义普通函数,弹出当前指针所包含的变量x的值
function f(){
    alert (this.x);
}

f.call(new a());

call()的官方解释,“调用一个对象的一个方法,以另一个对象替换当前对象。”,

f.call(new a())就是把函数(其实也是对象)f复制到被调用对象“new a()”下面去解析.我的理解是还没细细研究。

new 这个我还没学到。

关键在于this,对,关键还是在于this的作用域。this的作用域不是定义它的函数的作用域,而是执行时的作用域。

时间: 2024-10-20 02:31:15

对于JavaScript中this关键字的理解的相关文章

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关键字的使用比较

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

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中的伪数组理解

看过jQuery源码的人都知道类数组对象,与我们熟知的arguments对象很像 构造一个类数组必须有两个条件 第一个条件:你必须给对象定义个splice方法,只要他是一个function就可以 第二个条件:就是赋值一个length属性,或者增加push,unshift,shift,pop其中任何一个方法,并且调用了一次. 当这两个条件同时满足那么当前的对象在控制台输出后跟数组的格式一模一样. 一般而言大部分都是这样构造一个类数组对象(jQuery就是这么干的).因为相比而言,这样更简洁,并且更

对Javascript中原型的深入理解

  理解原型对象 在Javascript中无论什么时候,只要创建一个新的函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象(这个对象的用途是包含可以有特定类型的所有实例共享的属性和方法).如果按照字面上的意思来理解,那么原型属性就是通过调用构造函数而创建的那个对象的实例的原型对象. 在默认的情况下,所有的原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针.如下图 function P

深入解析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中原型的深入理解

  理解原型对象 在Javascript中不管什么时候,仅仅要创建一个新的函数,就会依据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象(这个对象的用途是包括能够有特定类型的全部实例共享的属性和方法).假设依照字面上的意思来理解.那么原型属性就是通过调用构造函数而创建的那个对象的实例的原型对象. 在默认的情况下,全部的原型对象都会自己主动获得一个constructor(构造函数)属性,这个属性包括一个指向prototype属性所在函数的指针. 例如以下图 func