xml地图|网站地图|网站标签 [设为首页] [加入收藏]

您的位置:亚洲必赢 > 计算机尝试 > 亚洲必赢登录:Javascript中this关键字详解,Javas

亚洲必赢登录:Javascript中this关键字详解,Javas

发布时间:2019-05-24 06:46编辑:计算机尝试浏览(73)

    在javascript里面,this是三个不一样日常的靶子,它不像别的编制程序语言那样,是储存在实例中的值,直接指向此实例。

    一、this指向构造函数实例化对象

    Javascript this关键字一般的话我们并不素不相识,可是怎么更加好的用好Javascript this关键字却需求我们密切斟酌,希望本文对遍布工程师有所支持。

    Quiz

    而是作为3个独立的指针,在差别的气象之下,指向分化的地点,那也是怎么大家会将它搞混的缘由。  

    在上篇作品中,大家关系了利用new和不使用new调用构造函数的界别,如下例:

    摘要

    请看上边包车型地铁代码,最终alert出来的是何许吧?

    上边大家来看下,它在分化处境下独家是什么样壹种造型

    复制代码 代码如下:

    本种类博文首要谈一些在 Javascript 使用中时时会搅乱的尖端应用,包罗: prototype, closure, scope, this关键字. 对于一个亟待提升自个儿Javascript水平的程序猿,这个都以必要求调节的.

     1 var name = "Bob";  
     2 var nameObj ={  
     3     name : "Tom",  
     4     showName : function(){  
     5         alert(this.name);  
     6     },  
     7     waitShowName : function(){  
     8         setTimeout(this.showName, 1000);  
     9     }  
    10 };  
    11 
    12 nameObj.waitShowName();
    

    情形一、纯粹的函数调用

    function Benjamin(username, sex) {
        this.username = username;
        this.sex = sex;
    }
    var benjamin = new Benjamin("zuojj", "male");
    //Outputs: Benjamin{sex: "male",username: "zuojj"}
    console.log(benjamin);
    var ben = Benjamin("zhangsan", "female");
    //Outputs: undefined
    console.log(ben);

    本节重要介绍this关键字和scope.

    要解决那个标题大家需求驾驭Javascript的this关键字的用法。

    那是函数的最家常用法,属于全局性调用,由此this就表示全局对象Global。

    当构造函数当做普通函数被调用时,并不曾重临值,同不时间this指向全局对象。那么大家什么样来制止因为贫乏new关键字,而发生的标题啊?

    正文的Javascript源代码从 那儿 下载.

     

    请看上边这段代码,它的运维结果是一。亚洲必赢登录:Javascript中this关键字详解,Javascript中的this关键字用法详解。  

    复制代码 代码如下:

    Contents

    this指向何地?

     代码如下:

    function Benjamin(username, sex) {
     //Check whether "this" is a "Benjamin" object
     if(this instanceof Benjamin) {
         this.username = username;
         this.sex = sex;
     }else {
      return new Benjamin(username, sex);
     }
    }
    var benjamin = new Benjamin("zuojj", "male");
    //Outputs: Benjamin{sex: "male",username: "zuojj"}
    console.log(benjamin);
    var ben = Benjamin("zhangsan", "female");
    //Outputs: Benjamin {username: "zhangsan", sex: "female"}
    console.log(ben);

    摘要引进this关键字关于apply和callscope详述一些认证结论后记仿照效法资料本文的源码

    相似来讲,在Javascript中,this指向函数执行时的当下目的。

     

    在上例中,大家先是检查this是不是是Benjammin的实例,要是否,使用new自动调用构造函数,并实例化,那表示,我们不再供给顾忌,遗漏new关键字实例化构造函数。当然如此我们大概会养成1个坏的习贯,要是制止这种光景呢?大家能够抛出2个不当,像上边那样:

    引入

    In JavaScript, as in most object-oriented programming languages, this is a special keyword that is used within methods to refer to the object on which a method is being invoked.

    ——jQuery Fundamentals (Chapter 2), by Rebecca Murphey

     function test(){
    
        this.x = 1;
    
        alert(this.x);
    
      }
    
      test(); // 1
    

    复制代码 代码如下:

    用作3个程序员, 你只怕早已经习贯于面向对象语言中代表当前目的的引用(恐怕指针), 如的c 中的this恐怕 python 中的self,当然具备OO属性( Javascript 其实越来越多的是壹种所谓的函数式语言)的 Javascript 同样, 它也许有所引用当前品质的靶子的指针(可能引用), 也便是this关键字.

    值得注意,该重大字在Javascript7月施行情况,而非注明境遇有关。

      

    function Benjamin(username, sex) {
     //Check whether "this" is a "Benjamin" object
     if(this instanceof Benjamin) {
         this.username = username;
         this.sex = sex;
     }else {
      // If not, throw error.
            throw new Error("`Benjamin` invoked without `new`");
     }
    }

    为了知道this关键字,假设您只想记住一句话,那应该是 this关键字总是指向当前函数的主人对象(试行空间), 至于这句话怎么知道, 能够倾慕下边包车型客车详尽表达.

    The this keyword is relative to the execution context, not the declaration context.

    为了验证this正是全局对象,小编对代码做一些改换:  

    二、this指向调用该函数的对象

    那就是说哪些是 scope 呢?

    大家比释迦牟尼注脚那些标题:

    代码如下:

    看上面包车型地铁例证:

    wikipedia 中的解释是 In computer programming, scope is an enclosing context where values and expressions are associated. 华语就是所谓的 成效域, 它指明的是二个数值也许表明式所涉及的上下文(能够被引述的进行空间).

    var someone = {
        name: "Bob",
        showName: function(){
            alert(this.name);
        }
    };
    
    var other = {
        name: "Tom",
        showName: someone.showName
    }
    
    other.showName();  //Tom
    

     

    复制代码 代码如下:

    scope 与this有哪些关系吗? 如若从下边的定义来看, this指向的连天当前援引此函数的靶子,而当你要认清当前引述的对象时, 那时你就得弄驾驭当前函数所在的 scope. 具体可见上边包车型大巴分析.

    this关键字固然是在someone.showName中扬言的,但运营的时候是other.showName,所以this指向other.showName函数的脚下指标,即other,故最后alert出来的是other.name。

     var x = 1;
    
      function test(){
    
        alert(this.x);
    
      }
    
      test(); // 1
    

    var x = 10;
    var obj = {
     x: 10,
     output: function() {
      //Outputs: true
      console.log(this === obj);
      return this.x;
     },
     innerobj: {
      x: 30,
      output: function() {
       //Outputs: true
       console.log(this === obj.innerobj);
       return this.x;
      }
     }
    };
    //Outputs: 10
    console.log(obj.output());
    //Outputs: 30
    console.log(obj.innerobj.output());

    Javascript this关键字

     

      

    三、this指向全局对象

    请看下边包车型客车多少个例子.

    平素不分明的日前目的时

    运维结果照旧一。再变一下:  

    在上头商讨构造函数的时候大家也斟酌到不适用new的时候,this会指向全局对象,下边大家来看看二种常见的轻便犯错的实例:

    一个 python 的例子:

    当未有显著的实施时的方今目的时,this指向全局对象window。

     代码如下:

    复制代码 代码如下:

    class Person(object):  """a person class     """  def __init__(self, name):  self.name = name    #这里的self指向的是实例化后的对象,如下面中的zhutao  def get_name(self):  return self.name  zhutao = Person("zhutao")  print zhutao.name  一个 Javascript 的例子:   window.name = "zhutao from window" var get_name = function(){  return this.name;   // this的具体指向只能在运行时才能确定,也就是确定运行时调用其的对象  };  alert(get_name());  // 输出zhutao from window, get_name调用的对象为window  var obj = {}  obj.name = "zhutao from obj";  alert(get_name.apply(obj)); // 输出zhutao from obj, 我们强制地使用了 apply来更改调用的对象,使其指向obj  var innerobj = {  "name" : "zhutao from innerobj" };  innerobj.get_name = get_name;   // 使得innerobj的get_name方法指向了global scope的get_name函数  alert(innerobj.get_name()); // 输出zhutao from innerobj, 此时this指向的是innerobj 
    

    By default, this refers to the global object.

    何以说是全局对象(the global object),因为非浏览器意况下(举个例子:nodejs)中全局变量并非window对象,而正是叫“全局变量”(the global object)。可是出于大家那片小说首要研究的是前端开荒知识,所以nodejs就被大家忽视了。

    本文由亚洲必赢发布于计算机尝试,转载请注明出处:亚洲必赢登录:Javascript中this关键字详解,Javas

    关键词: bwin娱乐平台

上一篇:快速入门

下一篇:没有了