30歳からのプログラミング

30歳無職から独学でプログラミングを開始した人間の記録。

JavaScriptの言語仕様(ES5)

React のクラスコンポーネントの bind は何を解決しているのか

クラスコンポーネントでイベントハンドラを設定する際に必要になる、constructorメソッドでのバインド。 そもそもこれはなぜ必要なのか。どのような動作をすることで、どのような問題を解決しているのか。 Hooks が登場したことで今後はクラスコンポーネント…

JavaScriptのショートサーキット評価

ほとんどのプログラミング言語には、ANDやORを表す論理演算子が用意されている。 そして、左辺を評価した時点で論理式の結果が確定した場合には右辺の評価を行わないことを、ショートサーキット評価(短絡評価)という。 例えば、A AND Bという論理式があっ…

ES2015の関数(アロー関数、this、残余引数など)

ES2015で加わった、関数に関する仕様について。 引数のデフォルト値 関数の定義時に、引数のデフォルト値を指定できるようになった。 関数を呼び出す際に引数が渡された場合はそれを、渡されなかった場合はデフォルト値を、使用する。 function addFunc(x = …

スコープとクロージャ

2016.8.27追記 ES2015で登場したletとconstはブロックスコープを持つので、そちらも参照されたい。 var,let,constの違いは、ブロックスコープと巻き上げ グローバルスコープとローカルスコープ スコープとは、変数を参照できる範囲のこと。 スコープ外の変数…

関数のTips

関数の定義方法 JavaScriptで関数を定義する方法は、関数宣言と関数式の2つ。 本当はもう一つあるが、それは非推奨のものなので、ここでは省略する。 // 関数宣言 function myFunc1(){}; // 関数式 var myFunc2 = function(){}; どちらでも同じように関数が…

プライベート変数

通常、オブジェクトのプロパティには、どこからでもアクセスできる。 このままだと、状態管理が大変になってしまう。 管理が煩雑になるし、予期していない箇所で値が書き換えられる恐れがあり、バグの温床にもなる。 特定の方法でのみアクセスできる変数を作…

JavaScriptにおける、継承の方法

以下、継承を実装していくにあたり、この記事では、次の2つのコンストラクタを用意する。 まず、Personコンストラクタ。プロパティは、nameとageを持つ。そしてプロトタイプに、sayName()とsayMyself()という、2つのメソッドを持つ。 そして、Personコンスト…

instanceof演算子について

instanceof演算子を使うことで、あるオブジェクトが、対象となるオブジェクトのインスタンスかどうかを調べることが出来る。 function Person(){}; var person1 = new Person(); console.log(person1 instanceof Person); //true 上記の例では、person1は、P…

constructorプロパティについて

JavaScriptの関数は原則的に、生成された瞬間にprototypeプロパティを持つ。 その中身はオブジェクトであり、constructorプロパティのみを持つ。このプロパティは、関数自身を参照している。 function myFunc(){}; console.log(Object.getOwnPropertyNames(m…

Object.creat()とプロトタイプチェーン

Object.creat()を使うと、[[Prototype]]を指定した上で、オブジェクトを生成できる。 リテラルで生成したオブジェクトの[[Prototype]]はObject.prototypeになるが、Object.creat()を使えば、任意のオブジェクトを[[Prototype]]に設定できる。 Object.creat()…

プロトタイプの基礎

Prototypeプロパティ JavaScriptのオブジェクトは、自身が持っているプロパティだけでなく、プロトタイプのプロパティにもアクセスすることが出来る。 オブジェクトがどんなプロトタイプを持っているかは、[[Prototype]]プロパティを見れば分かる。 [[Protot…

new演算子による、インスタンスの作成

関数に対してnew演算子を使うことで、オブジェクトを新しく作ることが出来る。 この関数をコンストラクタ、生成されるオブジェクトをインスタンスと呼ぶ。 コンストラクタにおけるthisは、new演算子によって生成されるインスタンスを指す。 function Person(…

オブジェクトの変更防止

オブジェクトも内部属性を持っている。 その一つが、[[Extensible]]。 これはオブジェクトが拡張可能かどうかを示し、これを使うことで、プロパティの追加や変更を制御できる。 Extensible [[Extensible]]はデフォルトではtrueになっている。 この状態だと自…

プロパティの内部属性

JavaScriptには様々な内部属性があり、それは二重ブラケット([[]])に囲まれて表現される。 プロパティも、いくつかの内部属性を持っている。 Object.getOwnPropertyDescriptor()とプロパティディスクリプタ まずは、内部属性にアクセスする方法について。 …

プロパティの操作,確認,列挙

プロパティ操作の基本 オブジェクトのプロパティは原則的に、いつでもその内容を変更できる。 後から新しいプロパティを追加したり、既存のプロパティを削除することも出来る。 var person = { name: 'Tom' }; person.age = 30; // プロパティを追加 console…

アクセサプロパティ(getterとsetter)

アクセサプロパティの基本 プロパティには、データプロパティとアクセサプロパティの2種類がある。 必ずどちらかに分類でき、両方の性質を兼ね備えることは出来ない。 データプロパティには値が格納される。 アクセサプロパティは、値は持たず、getterやsett…

this, call(), apply(), bind()

JavaScriptの言語仕様を勉強していくことにした。 いい技術書に巡り合ったこともあり、それなりに理解できるようにはなったが、まだまだ身についてはいない。 あくまでも、技術書の説明を読めば理解できる、というレベルに過ぎない。 これでは実際のコーディ…