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 */

 

posted @ 2015-03-03 12:22  sxshijingjing  阅读(828)  评论(0编辑  收藏  举报