各JSエンジンによるFunction.prototype.applyの2番目のパラメータの実現差異
3185 ワード
各functionには、2つの機能があります.1、functionの実行コンテキストを変更する(最初のパラメータはnullではなく、undefinedなど)2、Fnctionを実行/呼び出します.http://snandy.iteye.com/blog/420000 )apply方法の第二のパラメータは、行列として実現されると思われます.古典的な「javascript権威ガイド-第五版」を参照してください.中章8.6.4,145ページの一節:
「javascript権威の手引き」は書いています.
「apply()メソッドはcall()メソッドと似ています.関数に渡すパラメータは配列で指定されています.」
と641ページのFuntions.applyについては、argsは1つの配列として言及されています.
権威の手引きの中でこの言い方はあまり厳格でなくて、甚だしきに至っては自家撞着です.applyの2番目のパラメータはargmentsであり得るが、argmentsは配列ではないからである.アーグメンントについては、権威ガイドの章8.2.2に配列されていません.次はそれぞれテストします.
すべてのブラウザでテストはエラーが発生していません.2回目のポップアップ情報ボックスは、最初のappyに転送されるのは配列で、2回目のはargmentsオブジェクトで、argmentsは配列ではありません.これは擬似配列です.
また、アーグメンツはアーグメンントの例ではなく、あるいはアーグメンントのコンストラクタがアーグメンントではないという点には疑問がある.何ですか?自分でテストしてもいいです.
間違ったテストをして、appyに伝える二つ目のパラメータは普通のオブジェクトです.実際には、2番目のパラメータが配列やargmentsではない場合、一部のブラウザ関連開発ツールはエラーを報告します.例えば:
IE 8:ArayまたはargmentsオブジェクトFirefox 3.6.3が不足しています.second argment to Function.prototype.applymust be an array Chrome 5.0.37.29 dev: Function.prototype.appy:Agments list has wrong type Safari 4.0.3: Result of expression'.appy'[[object Object]]is not a valid argment for'Function.prototype.appy'.
ここで、IEの明示的な提示要求は、appyの第二のパラメータは、Arayまたはargmentsであり、Firefox/Chrome/Safariは明確ではないが、実際には、それらは、第二のパラメータをargmentsとすることができる.ここでは、すべてのブラウザが暗黙の了解に達しているようです.
argmentsは擬似配列であり、他の擬似配列(HTMLCollection、NodeListなど)もapplyのパラメータとして使えますか?
「javascript権威の手引き」は書いています.
「apply()メソッドはcall()メソッドと似ています.関数に渡すパラメータは配列で指定されています.」
と641ページのFuntions.applyについては、argsは1つの配列として言及されています.
権威の手引きの中でこの言い方はあまり厳格でなくて、甚だしきに至っては自家撞着です.applyの2番目のパラメータはargmentsであり得るが、argmentsは配列ではないからである.アーグメンントについては、権威ガイドの章8.2.2に配列されていません.次はそれぞれテストします.
function fun1(a){alert(a)}
fun1.apply(null,[1,2,3]);//
function fun2(){
fun1.apply(null,arguments);// arguments, arguments
}
fun2('test');
すべてのブラウザでテストはエラーが発生していません.2回目のポップアップ情報ボックスは、最初のappyに転送されるのは配列で、2回目のはargmentsオブジェクトで、argmentsは配列ではありません.これは擬似配列です.
また、アーグメンツはアーグメンントの例ではなく、あるいはアーグメンントのコンストラクタがアーグメンントではないという点には疑問がある.何ですか?自分でテストしてもいいです.
間違ったテストをして、appyに伝える二つ目のパラメータは普通のオブジェクトです.実際には、2番目のパラメータが配列やargmentsではない場合、一部のブラウザ関連開発ツールはエラーを報告します.例えば:
function fun(){
alert(arguments[0]);
}
fun.apply(null,{name:'john'});
IE 8:ArayまたはargmentsオブジェクトFirefox 3.6.3が不足しています.second argment to Function.prototype.applymust be an array Chrome 5.0.37.29 dev: Function.prototype.appy:Agments list has wrong type Safari 4.0.3: Result of expression'.appy'[[object Object]]is not a valid argment for'Function.prototype.appy'.
ここで、IEの明示的な提示要求は、appyの第二のパラメータは、Arayまたはargmentsであり、Firefox/Chrome/Safariは明確ではないが、実際には、それらは、第二のパラメータをargmentsとすることができる.ここでは、すべてのブラウザが暗黙の了解に達しているようです.
argmentsは擬似配列であり、他の擬似配列(HTMLCollection、NodeListなど)もapplyのパラメータとして使えますか?
window.onload = function(){
var divs = document.getElementsByTagName('div');
var chis = document.body.children;
function fun(){
alert(arguments[0]);
}
fun.apply(null,divs);
//fun.apply(null,chis);
}
First Child
divs chis,IE/Firefox/Chrome/Safari , 。 ,Opera 。 Opera apply ,arguments, 。
IE/Firefox/Chrome/Safari arguments, apply ? :
var obj = {0:'zero',1:'one',length:2}
function fun(){
alert(arguments[0]);
}
fun.apply(null,obj);
Operaを いて、 のブラウザはまだ できません.
いて、 は のconstructorをアラーに します.var obj = {0:'zero',1:'one',length:2,constructor:Array}
function fun(){
alert(arguments[0]);
}
fun.apply(null,obj);
Operaが に しているほか、IE/Firefox/Chrome/Safariをだませないのは、Operaだけが っているように える.
<div id=「right-1」class=「col-lg-12 col-sm-4 col-xs-4 ad」
<div id=「right-2」class=「col-lg-12 col-sm-4 col-xs-4 ad」
<div id=「right-3」class=「col-lg-12 col-sm-4 col-xs-4 ad」