鍍金池/ 問答/HTML/ javascript創(chuàng)建對象{}和new那種方式好?

javascript創(chuàng)建對象{}和new那種方式好?

(function() {
// 第一種 {}
var $路人女主養(yǎng)成方法 = {
  _信息方法 : function(_名字, _年齡, _職業(yè)) {
    var $路人女主 = Object.create(this);
    $路人女主._名字 = _名字;
    $路人女主._年齡 = _年齡;
    $路人女主._職業(yè) = _職業(yè);
    return $路人女主;
  },
  _養(yǎng)成方法 : function() {
    var $女主 = this;
    alert('第一種: \n名字: ' + $女主._名字 + '\n年齡: ' + $女主._年齡 + '\n職業(yè): ' + $女主._職業(yè));
  }
},
$女主數(shù)據(jù) = [
  $路人女主養(yǎng)成方法._信息方法('霞之丘詩羽', 18, '學(xué)生 & 小說家'),
  $路人女主養(yǎng)成方法._信息方法('加藤惠', 17, '學(xué)生'),
  $路人女主養(yǎng)成方法._信息方法('澤村·史賓瑟·英梨梨', 16, '學(xué)生&漫畫家')
];
$女主數(shù)據(jù).forEach(function($數(shù)據(jù)) {
  $數(shù)據(jù)._養(yǎng)成方法();
});
})();
(function() {
// 第二種 new
function $路人女主信息(_名字, _年齡, _職業(yè)) {
  var $路人女主 = this;
  $路人女主._名字 = _名字;
  $路人女主._年齡 = _年齡;
  $路人女主._職業(yè) = _職業(yè);
}
$路人女主信息.prototype._養(yǎng)成方法 = function() {
 var $女主 = this;
    alert('第二種:\n名字: ' + $女主._名字 + '\n年齡: ' + $女主._年齡 + '\n職業(yè): ' + $女主._職業(yè)); 
};
var $女主數(shù)據(jù) = [
new $路人女主信息('霞之丘詩羽', 18, '學(xué)生 & 小說家'),
new $路人女主信息('加藤惠', 17, '學(xué)生'),
new $路人女主信息('澤村·史賓瑟·英梨梨', 18, '學(xué)生&漫畫家')
];
$女主數(shù)據(jù).forEach(function($數(shù)據(jù)) {
  $數(shù)據(jù)._養(yǎng)成方法();
});
})();
一種是 創(chuàng)建對象{}方式
一種是 原型new 方式
這兩種寫法哪種寫法好? 還有性能方面和復(fù)用性?(變量名=>純屬娛樂)
回答
編輯回答
別傷我

js中字面量的形式創(chuàng)建對象更為常見,看上去更加清晰,并且性能更好,但是相對而言,其一般適用于較簡單場景,因為不能滿足多種復(fù)雜情況下的變化需求。
構(gòu)造函數(shù)可以接受不同的參數(shù)以創(chuàng)建相同原型不同屬性的對象,可以將相似類型的生成代碼合并起來,但是這個也是有好有壞,隨著應(yīng)用場景的變化可能反而極大的增加了理解難度和代碼管理難度。

2017年9月5日 20:50
編輯回答
孤星

一般情況如果這個對象不需要復(fù)用,有多個實例,那推薦用{}這種字面量的方式,可讀性更好
要用new的情況是你有一個工廠函數(shù),需要生成多個類似的對象

2018年4月13日 21:41
編輯回答
情已空

字面量的寫法更符合js的風(fēng)格習(xí)慣。性能是字面量的方式高的(高性能js這書好像看到過),復(fù)用性方面你這里感覺差別不大。

2018年9月15日 15:04
編輯回答
你的瞳

注意!各有各的優(yōu)點

//{}
平時聲明對象,或者該該對象復(fù)用性幾乎為0,那么就可以用{}
優(yōu)點:簡潔明了,益于書寫
缺點:只能創(chuàng)建一次對象,復(fù)用性較差,如果要創(chuàng)建多個對象,代碼冗余度太高
//工程函數(shù)構(gòu)造 funtion xxx(){}
優(yōu)點:復(fù)用性強(qiáng),創(chuàng)建多個對象 代碼量少
缺點: 對象無法識別,因為所有的實例都指向一個原型
2017年4月27日 04:42
編輯回答
墨小白

醉臥伊人笑···

2018年9月13日 10:45