this引用の方向
1538 ワード
javascriptの関数では、関数宣言時に定義されたモダリティに加えて、各関数は他の隠れたパラメータを受信することができます.ここでは、thisの役割と、異なる場面でのその違いの方向性について説明します.thisの値は呼び出しの仕方によって異なります.javascriptでは、thisの指向は大体四つの場合があります.
1.任意のプレフィックスの関数がない場合、thisはトップレベルのオブジェクトまたはグローバルオブジェクトを指し、ブラウザの中はwindowです.
では
1.任意のプレフィックスの関数がない場合、thisはトップレベルのオブジェクトまたはグローバルオブジェクトを指し、ブラウザの中はwindowです.
function fn(){
console.log(this);
}
fn(); // window{...}
2.メソッド呼び出し時、thisは方法のあるオブジェクトを指します.var robot = {
name:"cup",
say:function(){
console.log(this.name)
}
};
robot.say(); // 'cup'
3.コンストラクタで、新たに生成された例を指す.function Robot(name){
this.name = name;
this.say = function(){
console.log(this.name)
}
}
var robot_1 = new Robot('bower');
robot_1.say() // 'bower'
var robot_2 = new Robot('cup');
robot_2.say() // 'cup'
4.apply/call呼び出し時、apply/callメソッドの最初のパラメータを指します.var robot_1 = {name:'cup'}
var robot_2 = {name:'bower'}
function say(){
console.log(this.name)
}
say.call(robot_1) // 'cup'
say.call(robot_2) // 'bower'
apply/callはjs文法の中の一つの特殊な用法で、両者の用法は非常に似ています.具体的な内容はこの節の後で詳しく紹介します.では
function Robot(name){
this.name= name;
this.say=function(){
console.log(this.name)
}
}
var robot = new Robot('bower');
function say(){
console.log(this.name)
}
say.call(robot)