ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 関数の内部プロパティの概要 (例付き)

JavaScript 関数の内部プロパティの概要 (例付き)

不言
不言転載
2019-03-18 11:38:391979ブラウズ

この記事では、JavaScript 関数の内部プロパティを (例とともに) 紹介します。これには一定の参考値があります。必要な友人は参照できます。お役に立てば幸いです。

関数内には、this と argument という 2 つの特別なオブジェクトがあります。Arguments は、関数に渡されるすべてのパラメータを含む配列のようなオブジェクトです。主に関数のパラメータを保存するために使用されます。引数オブジェクトには、引数オブジェクトを所有する関数へのポインタである callee 属性もあります。

callee

function fact(num){
        if(num<=1){
        return 1;
        }else{
        return num*fact(num-1);
        }
    }

これは、再帰メソッドを使用して階乗を実装する関数です。このメソッドに関する 1 つの問題は、ファクトの名前が変更されると、関数内の関数が時刻名が変更されていない場合、関数は無効です。このとき、callee 属性は現在の関数を num パラメータ オブジェクトに置き換えるために使用されます。これは事実です。

callee を使用して以下を実装します

function fact(num){
            if(num<=1){
            return 1;
            }else{
            return num*arguments.callee(num-1);
            }
        }

this

this関数実行の環境オブジェクトを指します。関数がオブジェクトのメソッドとして呼び出される場合、このときの this オブジェクトは現在関数を呼び出しているオブジェクトを指します。

異なる環境では、this が指す値が異なります。ここでは、さまざまな実行環境で this が指すいくつかの値を示します。

メソッド呼び出し

関数がオブジェクト メソッドとして使用され、関数内の this は現在のオブジェクトにバインドされます (メソッド呼び出しとも呼ばれます)

例:

var myNum = {
      value:1,
      increment:function(arg){
          this.value +=arg;

      }
  };
   myNum.increment(3);
  console.log(&#39;example1:&#39;+myNum.value);//example1:4

上記のインクリメントはオブジェクト メソッドであり、オブジェクトメソッド内の this 現在のオブジェクトを指します

関数呼び出し

関数が非オブジェクト メソッドとして使用される場合、これはグローバル オブジェクト ウィンドウにバインドされます。現時点では内部関数なので、that = this を使用できます。

// 一般的函数
function add(a){
    return a+2 ;
}

var value = 2;
myNum.count = function (){
    let value = 1;
    let help = function(){
        this.value = add(this.value);
    }
    help();
    console.log(this.value);//4
}
myNum.count();


that = this方式

var value = 2;
myNum.count = function (){
    let value = 1;
    let that = this;
    let help = function(){
        that.value = add(that.value);
    }
    help();
    console.log(that.value);//3
}
myNum.count();

Constructor

new 演算子を使用してコンストラクターを呼び出すと、まずコンストラクターに接続されたプロトタイプ (プロトタイプ オブジェクト) が作成され、次にこれがオブジェクトにバインドされます

function Person(name){
    this.name = name;
}

Person.prototype.sayName = function(){
    return this.name;
}
var person1 = new Person(&#39;TOM&#39;);

console.log(person1.sayName());

apply\call\bind

これを指定された環境オブジェクトにバインドします

 
 var people = {
    name:"LILY"
}
console.log(Person.prototype.sayName.apply(people));
console.log(Person.prototype.sayName.bind(people)());
console.log(Person.prototype.sayName.call(people));

call: このメソッドは、指定された this 値と指定されたパラメーター リストを使用して関数を呼び出します。
apply: このメソッドは、指定された this 値と指定されたパラメーター (配列または配列のようなオブジェクト) を使用して関数を呼び出します。
bind: このメソッドは新しい関数を作成し、呼び出されたときに this キーワードを指定された「値」に設定します。

ES6 アロー関数

es6 アロー関数の this は、実行環境オブジェクトではなく、定義されているオブジェクトを指します。つまり、これはアロー関数で使用されるときに変更されない値です

function foo(){
    setTimeout(()=>{
        console.log('name:',this.name);
    },1000)
}
var name = "kiki";
foo.call({name:"didi"});//name:didi

アロー関数の this の値は、それが定義された環境オブジェクトを指します es5 でのアロー関数の実装方法: that = this の仕組みを使用して this のバインディングを実現します

上 これは関数の内部プロパティの理解です。

以上がJavaScript 関数の内部プロパティの概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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