Aray.prototype.slice.cal(argments)
5226 ワード
Aray.prototype.slice.cal(argments)
この文章を転載する時、一部にはまだ困惑しています.そして、作者が大胆に推測している部分は信頼できないと感じています.この文章はコール方法の原理をよく説明します.
我々は、Aray.prototype.slice.calはlength属性を持つオブジェクトを配列に変換することができ、IEの下のノードセットを除いて(ieの下のdomオブジェクトはcomオブジェクトとして実現されるので、jsオブジェクトとcomオブジェクトは変換できない).
例えば:
まず、sliceには二つの使い方があります.一つはString.sliceで、一つはAray.sliceで、一つは文字列で、二つ目は行列で、ここで2番目を見ます.
Aray.prototype.slice.calはargmentsを行列に変換できます.それはargments.toAray().slice()です.ここでは、アーラy.prototype.slice.calのプロセスは、まず入ってきた最初のパラメータを配列に変えてから、sliceを呼び出してもいいですか?
コールの使い方を見たら、次のような例があります.
ここでは、基本的にはほぼ同じです.私達は大胆にsliceの内部実現を当ててみます.
最後に、行列に変換する汎用関数を付けます.
この文章を転載する時、一部にはまだ困惑しています.そして、作者が大胆に推測している部分は信頼できないと感じています.この文章はコール方法の原理をよく説明します.
我々は、Aray.prototype.slice.calはlength属性を持つオブジェクトを配列に変換することができ、IEの下のノードセットを除いて(ieの下のdomオブジェクトはcomオブジェクトとして実現されるので、jsオブジェクトとcomオブジェクトは変換できない).
例えば:
1 var a={length:2,0:'first',1:'second'};
2 Array.prototype.slice.call(a);// ["first", "second"]
3
4 var a={length:2};
5 Array.prototype.slice.call(a);// [undefined, undefined]
jsの子供用の靴を習い始めたばかりかもしれませんが、なぜこのような機能が実現されたのかはよく分かりません.例えば私は一つです.だから、探してみます.まず、sliceには二つの使い方があります.一つはString.sliceで、一つはAray.sliceで、一つは文字列で、二つ目は行列で、ここで2番目を見ます.
Aray.prototype.slice.calはargmentsを行列に変換できます.それはargments.toAray().slice()です.ここでは、アーラy.prototype.slice.calのプロセスは、まず入ってきた最初のパラメータを配列に変えてから、sliceを呼び出してもいいですか?
コールの使い方を見たら、次のような例があります.
1 var a = function(){
2 console.log(this); // 'littledu'
3 console.log(typeof this); // Object
4 console.log(this instanceof String); // true
5 }
6 a.call('littledu');
コールした後、伝達パラメータの作用領域に現在の関数を入れたということが分かります.これは正しいかどうか分かりませんが、とにかくthisは伝わった対象を指しています.ここでは、基本的にはほぼ同じです.私達は大胆にsliceの内部実現を当ててみます.
1 Array.prototype.slice = function(start,end){
2 var result = new Array();
3 start = start || 0;
4 end = end || this.length; //this , call , this , ,
5 for(var i = start; i < end; i++){
6 result.push(this[i]);
7 }
8 return result;
9 }
たぶんこのようにしましょう.理解すればいいです.深く追究しません.最後に、行列に変換する汎用関数を付けます.
1 var toArray = function(s){
2 try{
3 return Array.prototype.slice.call(s);
4 } catch(e){
5 var arr = [];
6 for(var i = 0,len = s.length; i < len; i++){
7 //arr.push(s[i]);
arr[i] = s[i]; // push
8 }
9 return arr;
10 }
11 }