そもそも下の考えたコードは欠陥品ですよ。
JavaScript
1function Dog() {
2 console.dir("犬");
3 this.bark = function() {
4 console.log('わんわん');
5 };
6}
7function Fox() {
8 console.dir("狐");
9 this.bark = function() {
10 console.log('こんこん');
11 };
12}
13
14Dog(); // 犬
15Fox(); // 狐
16this.bark(); // こんこん
わんわんどこいった
という訳で、グローバルのthisに双方が書こうとした結果、上書きされて犬の鳴き声メソッドが死にました。
何故dog
変数作ってdog.bark
にしようと思ったのかという意味を汲み取るようにしましょう。
しかし実際に生成されているかどうか判断する材料がない、もしくはわからないのでどなたかわかる方はいないでしょうか?
JavaScriptの関数・オブジェクト・配列は面白い特性があり、
比較演算子===
で検証した場合、それが格納されているアドレス番地で比較して同じか否かを判定します。
JavaScript
1var o = {name: "taro"};
2console.log(o === o); // true
3console.log(o === {name: "taro"}); // false
4
5var a = [123];
6console.log(a === a); // true
7console.log(a === [123]); // false
8
9var fn = function () { return 123; };
10console.log(fn === fn); // true
11console.log(fn === (function () { return 123; })); // false
このように全く同じように思えるものでも、
その場で{}
や[]
、function(){}
で生み出したものは別のアドレス番地に一時的に作られてそのアドレス番地同士で比較するのでfalseになります。
この特性を使えば、「毎回生成されたのか否か」を確認することができます。
JavaScript
1function Dog (p) {
2 this[p] = function () {
3 console.log('わんわん');
4 }
5}
6Dog('taro');
7Dog('jiro');
8console.log(this.taro === this.jiro); // false
違うものが生成されました。
従ってDogを二度実行して手に入れたこれらの関数は毎回生成されたと言えます。
つか、関数実行したら上から下まで実行するんだから生成してるに決まってるんですけどね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。