jsの中のコール()/apply()
1619 ワード
まず簡単な例を見ます.1+1=2はできますよね.
これは脳の障害ではないですか?余計なことをして、一挙にくそっというcallを作って、毛をかきますか?直接add(1,1)はだめですか?
よく分かりません.add.call(sub)です.きっとadd直接subの中の引き算です.じゃ、コールをして何をしますか?
どのような場面でcall、applyというきつい書き方が使われますか?
callとappyは関数の実行環境、すなわちthisの方向を再定義するために使用できます.callとappyはいずれも関数を変更するために動作しています. contextとは文脈であり、換言すれば、関数体内部のthisの方向を変えるためである.何故なら JavaScript の関数には「定義時文脈」と「実行時文脈」と「文脈は変えられます」という概念があります.
コール():文法:call(Obj,[arg 1]) 私の口語文:
ここで、changeStyle関数はboxオブジェクトに呼び出されます.thisはboxオブジェクトを指します.
windowオブジェクトにはstyle属性がありません.アプリの使い方:
window.chageSteyle.apply(box,[height],‘200 px’);
現在window対象の「box」というdivの高さは直接200 pxになりました.
window.chageStyle.call(box,「height」,「200 px」)
box.style.height="200 px"に相当します.
ここを見たら分かりますよね.まだ分かりません.
この用法
window.chageSteyle.apply(box,[height],‘200 px’);
この書き方を見たら分かりますよね.えっと、実は書き方と形式が違っています.本質は同じです.
配列の中だけで、thisを変えるために、
これも、addの飛天スキルを盗むためですよ!
括弧内のオブジェクトを括弧外の関数にまとめる属性です.継承と呼ぶことができます.
function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
}
add.call(sub,1,1); // ? ‘2’ ‘0’
ここでコードシートを書くと、1+1=2という人がいます.明らかに1-1=0になったという人もいますよね. 実はadd.call(sub,1,1);add(1,1)=2に等しい...これは脳の障害ではないですか?余計なことをして、一挙にくそっというcallを作って、毛をかきますか?直接add(1,1)はだめですか?
よく分かりません.add.call(sub)です.きっとadd直接subの中の引き算です.じゃ、コールをして何をしますか?
どのような場面でcall、applyというきつい書き方が使われますか?
callとappyは関数の実行環境、すなわちthisの方向を再定義するために使用できます.callとappyはいずれも関数を変更するために動作しています. contextとは文脈であり、換言すれば、関数体内部のthisの方向を変えるためである.何故なら JavaScript の関数には「定義時文脈」と「実行時文脈」と「文脈は変えられます」という概念があります.
コール():
call ,sub add ,
:add , sub , sub , add , sub call , call add
sub , sub add “ ” ,
function changeStyle(attr, value)
{
this.style[attr] = value;
}
var box = document.getElementById('box');
window.changeStyle.call(box, "height", "200px");
ここで、changeStyle関数はboxオブジェクトに呼び出されます.thisはboxオブジェクトを指します.
windowオブジェクトにはstyle属性がありません.アプリの使い方:
window.chageSteyle.apply(box,[height],‘200 px’);
現在window対象の「box」というdivの高さは直接200 pxになりました.
window.chageStyle.call(box,「height」,「200 px」)
box.style.height="200 px"に相当します.
ここを見たら分かりますよね.まだ分かりません.
この用法
window.chageSteyle.apply(box,[height],‘200 px’);
この書き方を見たら分かりますよね.えっと、実は書き方と形式が違っています.本質は同じです.
配列の中だけで、thisを変えるために、
これも、addの飛天スキルを盗むためですよ!
括弧内のオブジェクトを括弧外の関数にまとめる属性です.継承と呼ぶことができます.