1. 程式人生 > >javascript對象的幾種創建方式整理

javascript對象的幾種創建方式整理

添加 屬性和方法 {} ceo this scrip 方法 alert type

1.工廠模式

//工廠模式雖然解決了創建多個相似對象的問題,但卻沒有解決對象識別的問題(即怎樣知道一個對象的類型)。

function createPerson(name,age,job){
  var o = new Object();
  o.name = name;
  o.age = age;
  o.job = job;
  o.sayName = function(){
    alert(this.name);
  };
  return o;
}
var person1 = createPerson(‘suga‘,29,‘singer‘);
var person2 = createPerson(‘bts‘,20,‘singer‘);
person1.sayName();
person2.sayName();

2.構造函數模式

function Person(name,age,job){
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayName = function(){
    alert(this.name);
  };
}
var person1 = Person(‘suga‘,29,‘singer‘);
var person2 = Person(‘bts‘,20,‘singer‘);

 與工廠模式相比,具有以下特點:

  1. 沒有顯式創建對象;
  2. 直接將屬性和方法賦給了this對象;
  3. 沒有return語句;
  4. 要創建新實例,必須使用new操作符;(否則屬性和方法將會被添加到window對象)
  5. 可以使用instanceof操作符檢測對象類型

  構造函數的問題:

  構造函數內部的方法會被重復創建,不同實例內的同名函數是不相等的。可通過將方法移到構造函數外部解決這一問題,但面臨新問題:封裝性不好。

3.原型模式

function Person(){}
Person.prototype.name = "suga";
Person.prototype.age = 29;
Person.prototype.job = "singer";
Person.prototype.sayName = function() {
  alert(this.name);
}

var person1=new Person();
var person2=new Person();
person1.name="果果";
alert(person1.name); --來自實例
alert(person2.name); --來自原型
當為對象實例添加一個屬性時,這個屬性就會屏蔽原型對象中保存的同名屬性。

javascript對象的幾種創建方式整理