• javascript中的this


    文章篇幅不是很大,大部分内容是我参考了别人的博客后经过自己理解,自己整理的。方便自己以后回顾知识。文中涉及到javascript中的Array对象的slice()、call()、apply();

    slice()方法,在我之前做的项目中,有两种数据类型下用到过。第一种是string类型的,还有一种是Array对象;

    string对象的slice():

    定义和用法

    slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。

    语法

    stringObject.slice(start,end)
    参数描述
    start 要抽取的片断的起始下标。如果是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符,-2 指倒数第二个字符,以此类推。
    end 紧接着要抽取的片段的结尾的下标。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。

    返回值

    一个新的字符串。包括字符串 stringObject 从 start 开始(包括 start)到 end 结束(不包括 end)为止的所有字符。

    Array对象的slice():

    定义和用法

    slice() 方法可从已有的数组中返回选定的元素。

    语法

    arrayObject.slice(start,end)
    参数描述
    start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
    end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

    返回值

    返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。

    提示和注释

    注释:您可使用负值从数组的尾部选取元素。

    注释:如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。

    call()和apply()方法使用介绍:

    每个函数都包含两个非继承而来的方法apply和call

    他们的用途相同,都是在特定的作用域中调用函数

    接收参数方面不同,apply接收两个参数,第一个参数是this第二个参数是一个数组,call方法的第一个参数和apply参数一样,但传递给函数的参数必须列出来。

    对javascript中的this有些片面,不全的地方自己后续还会整理的。

      

     1 /*!
     2 * 封装console.log()方法,方便以后调用;
     3 */
     4 function log(){
     5     var info = Array.prototype.slice.call(arguments,0);
     6     console.log.apply(console,info);
     7 }
     8 /*!
     9 * this 的用法
    10 */
    11 
    12 /*!
    13 * 如果是一个全局的function,则this相当于window对象,
    14 *    在function中通过this定义的各种属性和方法,可以在function外部访问.
    15 *    前提是这个function需要被调用(如果不调用,则里面定义的方法和属性会取不到);
    16 */
    17 function globalFn(){
    18     this.name="window";    
    19 }
    20 log(this);    //Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}
    21 log(this.name);    //""
    22 
    23 globalFn();
    24 log(this.name);    //"window"
    25 
    26 /*!
    27 * 如果使用new方式实例化一个对象,则this不等于window,this指向function的实例;
    28 */
    29 function Animal(){
    30     this.type="animal";
    31 }
    32 var animal0 = new Animal();
    33 log(animal0);    //Animal {type: "animal"}
    34 //animal0.song();  // Uncaught TypeError: undefined is not a function
    35 
    36 /*!
    37 * 使用prototype扩展方法,可以使用this获取到源对象的实例,私有字段无法通过原型链获取;
    38 */
    39 Animal.prototype = {
    40     song:function(){
    41         console.log(this.type+" song...");
    42     }
    43 }
    44 var animal1 = new Animal();
    45 log(animal1);    //Animal {type: "animal", song: function}
    46 
    47 /*!
    48 * 不管是直接引用function,还是实例化一个function,其返回的闭包函数里this都指向window;
    49 */
    50 function outerFn(){
    51     var name = "outer";
    52     function innerFn(){
    53         log(this.name);
    54     }
    55     innerFn();
    56 }
    57 outerFn();//window
    58 
    59 /*
    60 function outerFn(){
    61     var name = "outer";
    62     function innerFn(){
    63         log(this.name);
    64     }
    65     return innerFn;
    66 }
    67 var outer = new outerFn();
    68 outer();//window;
    69 */
  • 相关阅读:
    LeetCode-389-找不同
    xml配置与使用
    curl使用
    php中JPGraph入门配置与应用
    php开发通用采集程序
    adodb配置与使用
    swfupload上传
    ZendFramework使用中常见问题
    memcache配置与使用
    第四章 供给与需求的市场力量
  • 原文地址:https://www.cnblogs.com/sxshijingjing/p/4310654.html
Copyright © 2020-2023  润新知