原始人、古代人、現代人、対象に重度の患者と完璧主義者はそれぞれJavascriptの対象をどのように使いますか?


原始人使用定義式
function wannaDie() {
    alert("         ," +
            "          ," +
            "            ," +
            "           ……");
}
alert(typeof(wannaDie));
//alert(typeof wannaDie()); //         
古代人は変数式を使います.
var wannaDie = function() {
    alert("hello");
};
alert(typeof(wannaDie));
//alert(typeof wannaDie()); //         
私は歌を歌います
var sing = function() {
    alert("           ....");
};
sing();

sing = function() {
    alert("           ....");
};
sing();
TMエコーマシンですか?
<script type="text/javascript"> 
function sing() {
    alert("           ....");
}
sing();

function sing() {
    alert("           ....");
}
sing();

//  sing()       ,  javascript       ,         。 
//         ,               。  
</script>
先生はもう一度チャンスをください.
<script type="text/javascript">
  function sing() {
    alert("           ....");
  }
  sing();
</script>
<script type="text/javascript">
  function sing() {
    alert("           ....");
  }
  sing();
</script>
現代人が匿名関数を使う
普通の現代人
(function(){
  alert(" 。。 。。   。。       !");
})();
ちょっと追求している現代人は少し処理します.
window.myApp = window.myApp || {};
window.myApp.someFunction = function(){
    //so some work
};
求めている現代人はもっと多く作ります.
//   
(function(myApp, $, undefined){
    //do some work
}(window.myApp = window.myApp || {}, jQuery));
//     
window.myApp = (function(myApp, $, undefined){
    //do some work
    return myApp;
})(window.myApp || {}, jQuery);
使う時はこのようにしてもいいです.
MyApp.MyModule.MySubModule.doSomething();
対象重度患者向けモジュールモード(Revealing Module Pattern)
<script type="text/javascript">
  window.ns1 = (function (ns1, undefined) {
    var var1 = "var1";
    var var2 = "var2";
    var someFunction = function () {
      return myVar1 + " " + myVar2;
    };

    return {
      getVar1: function () {
        return myVar1;
      }, //myVar1 public getter
      setVar1: function (val) {
        myVar1 = val;
      }, //myVar1 public setter
      someFunction: someFunction //some function made public
    }
  })(window.ns1);

  alert(ns1);
  alert(ns1.var1);
  alert(ns1.var2);
  alert(typeof(ns1.getVar1));
  alert(typeof(ns1.setVar1));
  alert(typeof(ns1.someFunction));
</script>
実はこのような方法はまだ完璧ではありません.複数のオブジェクトを作成するには、同じ方法/関数が複数のコピーをするので、これは明らかに無駄です.
完璧主義者はプロタイプを使います.
完璧主義者の使い方
var Person = function(firstName, lastName, age){
  this.firstName = firstName;
  this.lastName = lastName;
  this.age = age;
};
Person.prototype.fullName = function(){
  return this.firstName + " " + this.lastName;
};

var person = new Person("Justin", "Etheredge");
alert(person.fullName());
alert(person.age)
完璧主義者の息子の使い方(継承&原型チェーン)
<script type="text/javascript">
var Person = function(firstName, lastName, age){
  this.firstName = firstName;
  this.lastName = lastName;
  this.age = age;
};
Person.prototype.fullName = function(){
  return this.firstName + " " + this.lastName;
};
var Spy = function(firstName, lastName, age){
  this.firstName = firstName;
  this.lastName = lastName;
  this.age = age;
};
Spy.prototype = new Person();
Spy.prototype.spy = function(){
  alert("-------");
  alert(typeof(this));
  alert(this.fullName() + " is spying.");   
};
var mySpy = new Spy("Mr.", "Spy", 50);
mySpy.spy();
alert(Spy);
alert(Spy.age);
alert(mySpy);
alert(mySpy.age);
</script>
対象声明の2つの方法を追加します.
<script type="text/javascript">
  //  1 
  var person1 = {
    name:"Johnson",
    age:30,
    sex:"male",
    hobby:function(){alert("girl!")}
  };
  //  2
  var person2 = function(){
    name = "Johnson";
    age = 30;
    sex = "male";
    hobby = function(){
      alert("girl!")
    };
  };

  alert(person1);
  alert(person2);
</script>
補足読み
現代JavaScriptの開発に備えています.
JavaScript名前空間
JavaScript作成対象