zoukankan      html  css  js  c++  java
  • javascript基础之我见(2)一句话搞定this,并浅析js,as相互调用的this问题

            在写js的时候,我们往往会遇到this的概念,this的指向,总会让人很头痛。今天根据我对this的理解,和一些经验,来用一句话总结下this。那么这句话就是:

       this在有函数调用者时指向调用者否则指向GLOBAL,call、apply除外。

        那么,我们通过一个例子来理解并记住这句话:

     1 function test(){
     2     console.log(this);
     3 }
     4 test();//Window
     5 var th = {};
     6 test.call(th)//th
     7 test.apply(th)//th
     8 var a = function(){
     9 }
    10 a.test = test;
    11 a.test();//Function a
    12 a.prototype = {
    13     test : test
    14 }
    15 var b = new a();
    16 b.test();//b;
    17 a.prototype.test()//a.prototype
    18 setTimeout(b.test,100)//Window
    19 document.body.onclick = function(e){
    20     b.test();//b
    21     test();//Window
    22     console.log(this)//document.body
    23 }
    24 function callMethod(callback){
    25     callback();//Window
    26     arguments[0]();//arguments --> arguments.0()
    27 }
    28 callMethod(b.test);

    上面的例子中注释的位置显示了当前this的指向,我们可以看到,this可以是对象也可以是函数等,在有调用者的时候指向调用者,call、apply可以改变函数内部的this,其他时刻指向的是Global(浏览器中为Window)。as的情况与js完全相同。

      下面我们来说说js,as之间调用时,this的指向:

      js调用as函数时,as函数内部的this指向root。

      as调用js时呢?实际上还是遵循上面的那句话。请看下面的例子

    1 //AS代码
    2 externalinterface.call("test");
    3 externalinterface.call("test.test");
    4 //JS代码
    5 function test(){
    6   console.log(this);  
    7 }
    8 test.test = test;

      AS代码中第一句调用,调用了全局函数test,并没有制定调用者,则此时test函数中this指向Global,AS第二句调用,是对test下的test进行调用,所以this会指向函数test,也就是说AS调用js,对于this的指向与AS无关,判断this的方式和js内部调用时完全相同。

          怎么样一句话记住this,没错吧~嘻嘻~

  • 相关阅读:
    由数字三角形问题理解动态规划
    堆排序
    清理oracle数据库空间
    十个常用破解网络密码的方法
    说说windows下64位程序和32位程序
    sql server使用第二记
    手机通讯录PK
    sql server 初级实践记
    You and your research ( Richard Hamming) P5
    TED
  • 原文地址:https://www.cnblogs.com/maorongmaomao/p/2667094.html
Copyright © 2011-2022 走看看