ホームページ >ウェブフロントエンド >jsチュートリアル >JSのthisのポインタとcallとapplyの関数

JSのthisのポインタとcallとapplyの関数

青灯夜游
青灯夜游転載
2018-10-08 16:25:472021ブラウズ

この記事では、このポインタの基本的な JS コンテンツと、興味のある友人が学習して参照できる関連知識ポイントを紹介します。

具体的な実務においては、そのポイントは関数の定義時点では決定できず、関数の実行時に決定されますが、実行環境に応じて大きく以下の3種類に分けられます。

##1. 関数が通常の関数として呼び出される場合、これはグローバル オブジェクトを指します。


##2. 関数がオブジェクトのメソッドとして呼び出される場合、これはグローバル オブジェクトを指します。オブジェクト


#3 を指します。関数がコンストラクターとして呼び出される場合、これは新しく作成されたオブジェクト


例 1:

# を指します。 ##

window.name = 'myname';
function getName() {
  console.log(this.name);
}
getName(); //输出myname
例 2:

var boy = {
  name: 'Bob',
  getName: function() {
    console.log(this.name);
  }
}
boy.getName(); //输出Bob
例 3:

function Boy(name) {
  this.name = name;
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Bob
例 3 には、別の特殊なケースがあります。 、コンストラクターが「return」を通じてオブジェクトを返すとき、その時点で、この操作の最終結果は、新しく作成されたオブジェクトではなく、このオブジェクトを返すため、この場合、これは役に立ちません。


例 4:

function Boy(name) {
  this.name = name;
  return { //返回一个对象
    name: 'Jack'
  }
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Jack
例 5:

function Boy(name) {
  this.name = name;
  return 1; //返回非对象
}
var boy1 = new Boy('Bob');
console.log(boy1.name); //输出Bob

呼び出しと適用

apply の役割は 2 つのパラメータを受け入れます。最初のパラメータは、関数本体内の this のポインタを指定します。2 番目のパラメータは、呼び出される関数を渡すために使用される配列です。パラメータリスト。


例 1:

function getInfo() {
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}
var boy1 = {
  name: 'Bob',
  age: 12
}
getInfo.apply(boy1,['sing','swimming']); //输出Bob like sing and swimming
call 渡されるパラメータの数は固定ではありません。apply と同様に、最初のパラメータも指定に使用されます。関数本体では、2 番目のパラメーターから開始して、各パラメーターが呼び出された関数に順番に渡されます。


例 2:

function getInfo() {
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}
var boy1 = {
  name: 'Bob',
  age: 12
}
getInfo.call(boy1,'sing','shopping'); //输出Bob like sing and shopping
さらに、ほとんどの高度なブラウザでは、bind メソッドも実装されています。call および apply との違いは、bind は変更のみを行うことです。 Internal this が指す関数ですが、すぐには実行されないため、明示的に呼び出す必要があります。

#例 3: ブラウザのバインド メソッドをシミュレートする

Function.prototype.bind = function(obj){
  var self = this;
  return function(){
    return self.apply(obj,arguments);
  }
};
var obj = {
  name: 'Bob',
  age: 12
};
var func = function(){
  console.log(this.name+' like '+arguments[0]+' and '+arguments[1]);
}.bind(obj);
func('sing','shopping');

#これがありません

#場合によっては、this のポイントが失われることがあります。このとき、this のポイントを変更するには、call、apply、bind を使用する必要があります。 例 1: "getName" メソッドが "boy" オブジェクトのプロパティとして呼び出される場合、これは "boy" オブジェクトを指します。 別の変数が "getName" メソッドを参照する場合、通常の関数呼び出しとして使用されるため、これはグローバル オブジェクト window

var boy = {
  name: 'Bob',
  getName: function() {
    console.log(this.name);
  }
}
boy.getName(); //输出Bob
var getBoyName = boy.getName;
getBoyName(); //输出undefined

を指します。例 2: 関数が関数内で定義されている場合でも、通常のオブジェクトとして呼び出された場合、これもポイントしますウィンドウ オブジェクトへの

var boy1 = {
  name: 'Bob',
  age: 12,
  getInfo: function() {
    console.log(this.name);
    function getAge() {
      console.log(this.age);
    }
    getAge();
  }
}
boy1.getInfo(); //Bob
        //undefined

上記はこの章の内容です。すべての内容です。その他の関連チュートリアルについては、

JavaScript ビデオ チュートリアル

をご覧ください。

以上がJSのthisのポインタとcallとapplyの関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。