理系公務員のプログラミング日記

【りあクト!1】JavaScriptの鬼門、this①

タグ:
JavaScript

買ったまましっかり読んでなかったので、GW中に読み進めたい

JavaのthisとPythonのself

Javaのthisはそんなに難しくないんですよねー。 javaでthisは自インスタンスを指し、主に自クラスの変数と同じ名前で引数を使いたい時に使う。

public class Person { String name; void Person(String name){ this.name = name; } void greet(){ System.out.println("Hi,I'm" + name) } } public class Main { public static void main(String[] args){ Person minky = new Person("Momo") minky.greet() } }

Pythonではthisの代わりにselfを使う。

class Person: def ___init__(self,name): self.name = name def greet(self): print("Hi,I'm" + self.name) minky = Person("Momo") minky.greet() #Hi,I'm Momo

selfは同じく自インスタンスを指す。
Pythonには設計哲学に「暗黙的であるよりも明示的のほうがいい」という一文があるらしい。見比べて見ると、引数の宣言にselfを入れることで自インスタンスをメソッドで利用すると明示的に宣言しているのがわかる。よく考えたらJavaのgreetメソッドでは自インスタンスのメンバーのnameを呼び出しているので、thisが引数として渡されていてもおかしくないかも。
これを「Javaでは暗黙的にthisを渡している」「Pythonでは明示的にselfを渡している。」と考えるらしい。

JavaScriptのthis

ポイントは「JavaScriptも暗黙的にthisを渡している」ところ。

const Person = function(name){ this.name = name; return this; }; // { gender: 'f' }をthisとして渡す const kanae = Person.call({ gender: 'f' }, 'Kanae'): console.log(kanae) // { gender:'f', name:'Kanae'}

この例では、function(this,name) となっていると考えると良いらしい。

最初全然分からんかったけど、自分で文章にしてみたら少しピンときた気がする・・・!