javascript
1function CellPhone(number) {
2 this.phoneNumber = number;
3}
4function SmartPhone(number, wifispots) {
5 this.wifispots = wifispots;
6 CellPhone.call(this, number);
7}
8martPhone.prototype = new CellPhone();
↑これは↓これと大体等価です。
javascript
1function CellPhone(number) {
2 this.phoneNumber = number;
3}
4function SmartPhone(number, wifispots) {
5 this.wifispots = wifispots;
6 this.phoneNumber = number;
7}
8martPhone.prototype = new CellPhone();
なぜ例文のような書き方をするかというと、
javascript
1function CellPhone(number) {
2 this.phoneNumber = number;
3 this.phoneNumber1 = number;
4 this.phoneNumber2 = number;
5 this.phoneNumber3 = number;
6 this.phoneNumber4 = number;
7 this.phoneNumber5 = number;
8}
9function SmartPhone(number, wifispots) {
10 this.wifispots = wifispots;
11 this.phoneNumber = number;
12 this.phoneNumber1 = number;
13 this.phoneNumber2 = number;
14 this.phoneNumber3 = number;
15 this.phoneNumber4 = number;
16 this.phoneNumber5 = number;
17}
18martPhone.prototype = new CellPhone();
↑こんな感じに書くと、さすがにバカっぽいので再利用したほうがいいからです。
ところでこの時に、
javascript
1function CellPhone(number) {
2 this.phoneNumber = number;
3}
4function SmartPhone(number, wifispots) {
5 this.wifispots = wifispots;
6 CellPhone(number);
7}
8martPhone.prototype = new CellPhone();
こう書いてしまうと上手くいきません。
なぜなら、
javascript
1function CellPhone(number) {
2 this.phoneNumber = number; // ここのthisと
3}
4function SmartPhone(number, wifispots) {
5 this.wifispots = wifispots; // ここのthisの中身が違う。
6 CellPhone(number);
7}
8martPhone.prototype = new CellPhone();
↑this
は文脈によって中身が変わるからです。こっちでのthis
をあっちに渡さないといけません。
callメソッドの書式はfun.call(thisArg[, arg1[, arg2[, ...]]])
となっており、あっちでのthis
を指定することができます。
ちなみに、bind
メソッドでも同じことができます。
javascript
1 CellPhone.bind(this)(number);
javascriptのプロトタイプ継承は無駄に複雑ですので、すべてを忘れてclass
構文+Babelを使った方が幸せになれるかもしれません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/10 04:31