js創建對象的6種方式

来源:http://www.cnblogs.com/shouce/archive/2016/02/23/5208716.html
-Advertisement-
Play Games

一、工廠模式 function createStudent(name,age){ var o=new Object(); o.name=name; o.age=age; o.myName=function(){ alert(this.name); }; return o; } var student


一、工廠模式

複製代碼
function createStudent(name,age){
             var o=new Object();
            o.name=name;
            o.age=age;
            o.myName=function(){
                alert(this.name);                    
            };
            return o;            
         }
         var student1 =createStudent('yjj',15);
         var student2 = createStudent('fff',18);
//問題: 工廠模式沒有解決對象識別的問題,不能確定一個對象的類型
複製代碼

二、構造函數模式

複製代碼
  function Student(name,age){
            this.name=name;
            this.age=age;
            this.myName=function(){
                alert(this.name);                    
            };    
         }
         var student1_ = new Student('yjj',15);
         var student2_ = new Student('fff',18);
          
        
         //new 關鍵字的作用
         //1.創建一個對象
         //2.將構造函數的作用域賦給新對象,this指向了新對象
         //3.執行構造函數中的代碼,為新對象添加熟悉
         //4.返回新對象
         
         //問題: 每個方法都要在每個實例上重新創建一遍
複製代碼

三、構造函數模式+原型模式

複製代碼
 function Student(name,age){
             this.name=name;
            this.age=age;
            
         }
         Student.prototype.myName=function(){
                alert(this.name);                    
         };    
         
         var student1__ = new Student('yjj',15);
         var student2__ = new Student('fff',18);
         student1__.myName();
複製代碼

四、動態原型模式

複製代碼
function Student(name,age){
             this.name=name;
            this.age=age;
            if(typeof this.myName!="function"){//第一次進入
                 Student.prototype.myName=function(){
                    alert(this.name);                    
                 };                    
            }
            
         }
       var student1___ = new Student('yjj',15);
         student1___.myName();
複製代碼

五、寄生構造函數模式

複製代碼
 function Student(name,age){
            var o = new Object();
            o.name=name;
            o.age=age;
            o.myName=function(){
                alert(this.name);                    
            };                    
            return o; 
         }
         var student1____ = new Student('yjj',15);
         student1____.myName();
         //這種模式的基本思想是創建一個函數,該函數的作用僅僅是封裝創建對象的代碼,然後再返回新創建的對象。
複製代碼

六、穩妥構造函數模式

複製代碼
 function Student(name,age){
            var o = new Object();
            var name=name;
            var age=age;
            o.myName=function(){
                alert(name);                    
            };                    
            return o; 
         }
          var student1_____ = new Student('yjj',15);
         student1_____.myName();
         //沒有公共屬性,而且其他方法也不用引用this的對象
複製代碼

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前段時間一個項目因併發量大。因防止宕機做了主從備份,首頁的表連接查詢又非常的耗時。故此拿出利器Redis緩存這個查詢結果,並隨著用戶操作而更新。 因官方目前只有linux版,Windows版下載: https://github.com/ServiceStack/redis-windows/tree/
  • 軟體環境:jdk、tomcat、docker、centos、虛擬機 首先,您要準備一個 CentOS 的操作系統,虛擬機也行。總之,可以通過 Linux 客戶端工具訪問到 CentOS 操作系統就行。 需要說明的是,Ubuntu 或其它 Linux 操作系統也能玩 Docker,只不過本文選擇了以
  • 使用JDK的類 BASE64Decoder BASE64Encoder Java代碼 package test; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * BASE64加密解密 */ public clas
  • 本文轉載:http://www.manongjc.com/article/517.html 選擇器是CSS的核心,從最初的元素、class/id選擇器,演進到偽元素、偽類,以及CSS3中提供的更豐富的選擇器,定位頁面上的任意元素開始變得愈發的簡單。 1、元素選擇器 這是最基本的CSS選擇器,HTML
  • 效果圖如下: 代碼如下: <html> <head> <title>Javascript版選擇下拉菜單互移且排序</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <
  • 效果圖如下: 代碼如下: 1 <!DOCTYPE html> 2 <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 3 <meta charset="UTF-8"> 4 <title>Doc
  • 基於jQuery拖拽插件製作拖拽排序特效是一款非常實用的滑鼠拖拽佈局插件。效果圖如下: 線上預覽 源碼下載 實現的代碼。 html代碼: <h1>水平拖拽</h1> <div class="demo"> <div class="item item1"><span>1</span></div> <di
  • 引言: 最近遇到個問題,同時引用了jquery庫和另外一個js庫。當用$XX去調用js庫函數時,發現失效了!於是找資料,原來是jquery命名衝突了。因為許多 JavaScript 庫使用 $ 作為函數或變數名,jquery也一樣。其實$只是jquery的一個別名而已,假如我們需要使用 jquery
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...