jsの中でcall、appy、bindの方法の使用
1932 ワード
javascriptでは、callとapplyはいずれも関数の実行時のコンテキストを変えるために存在し、換言すれば、関数体内部のthisの指向を変えるためである.
JavaScriptの大きな特徴は、関数には「定義時文脈」と「実行時文脈」と「文脈は変えられます」という概念があります.
applyとcallの両方にとって、役割は全く同じです.ただパラメータを受け取る方式は違います.例えば、次のような関数の定義があります.
コードは以下の通りです.
MDNの説明では、bind()方法は、バインディング関数と呼ばれる新しい関数を作成します.このバインディング関数を呼び出すと、バインディング関数が作成されたときにbind()方法の最初のパラメータをthisとして入力します.
JavaScriptの大きな特徴は、関数には「定義時文脈」と「実行時文脈」と「文脈は変えられます」という概念があります.
applyとcallの両方にとって、役割は全く同じです.ただパラメータを受け取る方式は違います.例えば、次のような関数の定義があります.
var func = function(arg1, arg2) {
};
以下のように呼び出すことができます.func.call(this, arg1, arg2);
func.apply(this, [arg1, arg2]);
この中のthisはあなたが指定したいコンテキストです.JavaScriptのオブジェクトはどれでもいいです.callはパラメータを順番に渡す必要があります.例:function fruits() {
this.color = "red";
}
fruits.prototype = {
say: function() {
console.log("My color is " + this.color);
}
}
var apple = new fruits;
apple.say(); //My color is red
そして:banana = {
color: "yellow"
}
apple.say.call(banana); //My color is yellow
apple.say.apply(banana); //My color is yellow
この特徴を利用すれば、継承が可能です.コードは以下の通りです.
/* */
function Parent(add,net,no,teacher) {
this.add = add;
this.net = net;
this.no = no;
this.teacher = teacher
}
/* */
function Child(name,age,sex,id) {
this.name = name;
this.sex = sex;
this.age = age;
this.id = id;
Parent.call(this," ","www.baidu.com","1608","ccy");
// Parent this Child
}
var child = new Child("fangMing","18"," ","10086");
console.log(child.add);
bind()の最も簡単な使い方は、関数を作成して、この関数をどのように呼び出しても同じthis値があるようにします.this.num = 9;
var mymodule = {
num: 81,
getNum: function() {
console.log(this.num);
}
};
mymodule.getNum(); // 81
var getNum = mymodule.getNum;
getNum(); // 9, ,"this"
var boundGetNum = getNum.bind(mymodule);
boundGetNum(); // 81
bind()方法はappyやcallに似ています.関数の内側にあるthisの方向を変えることもできます.MDNの説明では、bind()方法は、バインディング関数と呼ばれる新しい関数を作成します.このバインディング関数を呼び出すと、バインディング関数が作成されたときにbind()方法の最初のパラメータをthisとして入力します.