国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入理解JavaScript創建對象的多種方式以及優缺點

2024-05-06 15:16:27
字體:
來源:轉載
供稿:網友

寫在前面

這篇文章講解創建對象的各種方式,以及優缺點。

但是注意:

這篇文章更像是筆記,因為《JavaScript高級程序設計》寫得真是太好了!

1. 工廠模式

function createPerson(name) {  var o = new Object();  o.name = name;  o.getName = function () {    console.log(this.name);  };  return o;}var person1 = createPerson('kevin');

缺點:對象無法識別,因為所有的實例都指向一個原型

2. 構造函數模式

function Person(name) {  this.name = name;  this.getName = function () {    console.log(this.name);  };}var person1 = new Person('kevin');

優點:實例可以識別為一個特定的類型

缺點:每次創建實例時,每個方法都要被創建一次

2.1 構造函數模式優化

function Person(name) {  this.name = name;  this.getName = getName;}function getName() {  console.log(this.name);}var person1 = new Person('kevin');

優點:解決了每個方法都要被重新創建的問題

缺點:這叫啥封裝……

3. 原型模式

function Person(name) {}Person.prototype.name = 'keivn';Person.prototype.getName = function () {  console.log(this.name);};var person1 = new Person();

優點:方法不會重新創建

缺點:1. 所有的屬性和方法都共享 2. 不能初始化參數

3.1 原型模式優化

function Person(name) {}Person.prototype = {  name: 'kevin',  getName: function () {    console.log(this.name);  }};var person1 = new Person();

優點:封裝性好了一點

缺點:重寫了原型,丟失了constructor屬性

3.2 原型模式優化

function Person(name) {}Person.prototype = {  constructor: Person,  name: 'kevin',  getName: function () {    console.log(this.name);  }};var person1 = new Person();

優點:實例可以通過constructor屬性找到所屬構造函數

缺點:原型模式該有的缺點還是有

4. 組合模式

構造函數模式與原型模式雙劍合璧。

function Person(name) {  this.name = name;}Person.prototype = {  constructor: Person,  getName: function () {    console.log(this.name);  }};var person1 = new Person();

優點:該共享的共享,該私有的私有,使用最廣泛的方式

缺點:有的人就是希望全部都寫在一起,即更好的封裝性

4.1 動態原型模式

function Person(name) {  this.name = name;  if (typeof this.getName != "function") {    Person.prototype.getName = function () {      console.log(this.name);    }  }}var person1 = new Person();

注意:使用動態原型模式時,不能用對象字面量重寫原型

解釋下為什么:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 长汀县| 兰西县| 成安县| 洞头县| 清河县| 板桥市| 北票市| 深圳市| 安达市| 河南省| 汝城县| 峨眉山市| 五莲县| 瑞昌市| 珠海市| 寿阳县| 浪卡子县| 九江市| 平塘县| 平武县| 旬邑县| 奉新县| 新河县| 富锦市| 揭西县| 岳阳市| 正定县| 霍邱县| 古蔺县| 宁南县| 中方县| 灵璧县| 上饶县| 稷山县| 镇沅| 长沙市| 石景山区| 安远县| 济南市| 新蔡县| 萨嘎县|