本当にJavaScriptオブジェクトを作成しますか?

1831 ワード

今日は出題されました.JavaScriptオブジェクトを作成する方法はどれぐらいありますか?気軽に言ってくれれば、1,2,3,4とも言えるでしょう.しかし、心の中はいつも不安定です.まだありますか?結局、私は気楽な人ではないです.
以前の文章では、JSの「類」と対象の前の関係について話しましたが、対象は「類」から作成され、「類」は対象に一連の規範を提供し、公共のテンプレートを制定します.このように推理します:JSの中で構造関数のアナログ種類を通じて(通って)オブジェクトを創建するために用いて、どれだけの種類のアナログ種類の方法がありますか?
1.構造関数法
JSを少し学んだことのある人なら誰でも知っている方法です.
function Person(name,age){
  this.name = name;
  this.age = age;
}

Person.prototype = {
  sayName:function(){
    console.log(this.name)
  }
}

var Jack = new Person('Jack',18)
console.log(Jack.name)//Jack
console.log(Jack.age)//18
Jack.sayName()//Jack
このような構造関数法を使ってオブジェクトを作成するのはJSのオブジェクト作成の基本的な方法です.
2.Object.creat()法
Object.creat()は、ES 5が提案する新しい方法であり、この方法で返されるオブジェクトの原型オブジェクトとしてオブジェクトに入ることができる.
//                    ;
var Person = {
    name: 'Jack',
    age:'18',
    sayName:function(){
      console.log(this.name)
    }
}
var Jack = Object.create(Person)
console.log(Jack.name)//Jack
console.log(Jack.age)//18
Jack.sayName()//Jack
Object.creat()の内在原理:
Object.create  = function(obj){
    function F(){};
    F.prototype = obj;
    return new F(){};
}
このようなオブジェクトを作成する方法の利点は、比較的簡単であり、欠点は、プロトタイプオブジェクトとしての属性と方法は、公有変数であり、変更されやすく、インスタンスオブジェクト間でもデータを共有できないことである.
3.極簡主義法
この方法の実現方法は、
//1.         ,             createNew()      

var Person = {
  createNew:function(){}
}

//2.   Person.createNew()   ,                 ,                ;

var Person = {
  createNew:function(){
      var  p = {};
      p.name = 'Jack',
      p.age = '18',
      p.sayName = function(){
          console.log(this.name);
      }
      return p
  }
}
var Jack = Person.createNew()
console.log(Jack.name)
console.log(Jack.age)
Jack.sayName()
参考資料:阮一峰-Javascript定義類(クラス)の3つの方法