this引用の方向

1538 ワード

javascriptの関数では、関数宣言時に定義されたモダリティに加えて、各関数は他の隠れたパラメータを受信することができます.ここでは、thisの役割と、異なる場面でのその違いの方向性について説明します.thisの値は呼び出しの仕方によって異なります.javascriptでは、thisの指向は大体四つの場合があります.
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)