javascriptのcall applyのアプリケーションシーン
1840 ワード
いくつかのjQueryプラグインの中でよく見られますが、calback.call(xxx,xxx)のように、本で紹介されています。callとapply関数は作用領域を変えることができますが、やはりはっきりと理解できません。作用領域を変えるのは主にどんな問題を解決するためですか?このようなコードを読むたびに目まいがして、一気に直線読みから飛び出してしまいます。ちょっと回りくどい感じがします。
callとappyの役割は簡単です。コンテキストを変えて、適用シーンが多すぎます。時々「美しい」ためだけに、次のいくつかは私がよく使うものです。
1.
argmentsとarrayは似ていますが、彼はArayのshなどの方法がありません。どうすればいいですか?
Aray.prototype.push.call(argments)
3.Javascriptプライベート方法の概念がないので、クローズドで実現したいです。
この時あなたのcalbackの中のthisは現在の文脈を指します。たとえばPersonのような一つのタイプで、彼の方法sayにはcalbackのパラメータがあります。このcalbackが普通の括弧で実行されるなら、このcalbackでpersonを実行する他の方法は、person.otherで実現する必要がありますが、コンテキストを切り替えると、this.otherで解決します。コードの対比は以下の通りです。
callとappyの役割は簡単です。コンテキストを変えて、適用シーンが多すぎます。時々「美しい」ためだけに、次のいくつかは私がよく使うものです。
1.
Object.prototype.toString.call(Obj)
Objのタイプを判断するために使用されます。argmentsとarrayは似ていますが、彼はArayのshなどの方法がありません。どうすればいいですか?
Aray.prototype.push.call(argments)
3.Javascriptプライベート方法の概念がないので、クローズドで実現したいです。
(function () {
var Person = function () {
this.doSomeThing = function () {
_privateFunction.call(this);
}
}
var _privateFunction = function () {
}
window.Person = Person;
}).call(window);
大体この意味です。calbackを使う時、あなたのcalbackの中の文脈が現在の文脈であることを望む時、callやappyを使ってもいいです。何かいいところがありますか?この時あなたのcalbackの中のthisは現在の文脈を指します。たとえばPersonのような一つのタイプで、彼の方法sayにはcalbackのパラメータがあります。このcalbackが普通の括弧で実行されるなら、このcalbackでpersonを実行する他の方法は、person.otherで実現する必要がありますが、コンテキストを切り替えると、this.otherで解決します。コードの対比は以下の通りです。
var Person = function(){
};
Person.prototype.say = function(callback){
callback();
};
Person.prototype.other = function(){
};
var vincent = new Person();
vincent.say(function(){
vincent.other();
});
コールを使いました
var Person = function(){
};
Person.prototype.say = function(callback){
callback.call(this);
};
Person.prototype.other = function(){
};
var vincent = new Person();
vincent.say(function(){
this.other();
});
以上述べましたが、本文の内容は全部です。お好きになってください。