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