JAvascript-この要約


wecodeの研究発表のためにこの内容を再整理します
JavaScriptには関数(function)とメソッド(method)があります.関数は独立して機能を実行し、メソッドはそのオブジェクトを呼び出す機能を実行します.
関数とオブジェクトをばらばらに区別するJavaScriptでは、この2つを区別する機能です.
別の言語でthisがクラスで作成されたオブジェクトを表す場合、JavaScriptは関数の呼び出し方法に応じてオブジェクトを変更します.
大きな関数呼び出しの場合、メソッド呼び出しの場合、コンストラクション関数、this、call、applyバインドに分けることができます.

関数呼び出し

function func(){
  console.log(this)
}

func() // Window {...}
「グローバルオブジェクト」(Window)は特殊なオブジェクトで、すべてのオブジェクトがそのオブジェクトのプロパティです.thisとは、現在実行されている関数をpropertyとするオブジェクトを指す.関数では、グローバルオブジェクト(Window)を指します.言い換えれば、Windowはa関数をpropertyとする.

メソッド呼び出し

const obj = {
  name: 'dongha',
  say: function() {
    return '저는 ' + this.name;
  }
}

console.log(obj.say()) // 저는 dongha
メソッドが呼び出されると、thisはその属するオブジェクトを指します.簡単に言えば、obj.say()のうちsay()の前のオブジェクトを指す.

ジェネレータとthis

function Person() {
    console.log(this); // Person {}
}
new Person(); 
new演算子を使用してジェネレータを呼び出すと、空のオブジェクトが作成され、この空のオブジェクトに存在します.これは、ジェネレータによって作成された空のオブジェクトを指します.
function Person() {
    console.log(this.age); // undefined
    this.age = 29;
    console.log(this.age) // 29
}
new Person(); 
コンストラクション関数を使用して新しいオブジェクトを作成する場合、thisは空のオブジェクトを指します.そこでage propertyを再割り当てすると、this.age出力値.
function Person() {
    this.name = 'kim';
    console.log(this); // Person { name: 'kim' }
}
const me = new Person();
console.log(me); // Person { name: 'kim' }
通常の関数として実行される場合、これはグローバルオブジェクトを指し、windowオブジェクトにnameというpropertyとkimという値が追加されます.関数にreturnがないため、変数kimはundefinedを出力します.
ただし、コンストラクション関数は空のオブジェクトを生成します.これは、空のオブジェクト(空のオブジェクトになる)を指すため、kim変数{name:[kim]}オブジェクトに構成と値を割り当てます.結論はconsoleオブジェクトがログに出力されます.

callとapplyのバインド


コールメソッド
Function.prototype.call(thisArg[,arg1[, arg2], ...]]])
callメソッドは,呼び出し主体である関数を直ちに実行するコマンドである.最初のパラメータをthisにバインドした後、パラメータは関数を呼び出すパラメータです.callメソッドを使用して、オブジェクトをに指定します.
const func = function(a, b, c) {
    console.log(this, a, b, c)
}


func(1, 2, 3) // Window{...} 1 2 3 
func.call({ x: 1 }, 4, 5, 6) // {x:1} 4 5 6
callを使用して{x:1}を指定できます.
適用方法
Function.prototype.apply(thisArg[, argsArray])
applyはcallと同じ機能です.ただし、2番目のパラメータとして配列を受信し、その配列の要素を呼び出す関数のパラメータとして指定します.
const func = function(a, b, c) {
    console.log(this, a, b, c) // {x:1} 4 5 6
}

func.apply({ x: 1 }, [4, 5, 6])
注意:
https://im-developer.tistory.com/96?category=846746
https://www.inflearn.com/course/%EC%A7%80%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%96%B8%EC%96%B4-%EA%B8%B0%EB%B3%B8/lecture/2563?tab=note&mm=close
コアJavaScript