讓JS寫的更接近OOP

来源:http://www.cnblogs.com/sunkaixuan/archive/2016/02/06/5184201.html
-Advertisement-
Play Games

下麵這段代碼就是利用JS原型對象,來實現的類的繼承DEMO $ 為jquery對象 ////公共方法 // $.oop.newClass=function newClass(obj) { // function create() { // if (obj != null) // return obj


 

下麵這段代碼就是利用JS原型對象,來實現的類的繼承DEMO 

 

$ 為jquery對象

////公共方法
//  $.oop.newClass=function newClass(obj) {
//     function create() {
//         if (obj != null)
//             return obj();
//     }
//     var c = new create();
//     return c;
// }

//
var person = $.oop.newClass(function () {

    //構造函數
    function person() {

    }

    //公有屬性
    person.prototype.age = 15;

    //公有函數
    person.prototype.eat = function () {
        alert("我會吃");
    };

    return person;
});

//程式員
var programMonkey = $.oop.newClass(function () {

    //構造函數
    function programMonkey() {

    } programMonkey.prototype = person.prototype;//繼承


    programMonkey.prototype.skill = "asp.net";

    programMonkey.prototype.work = function () {
        alert("我會加班");
    }

    return programMonkey;
});


var pm = new programMonkey();
//人的函數
pm.eat();
//程式猿的函數
pm.work();
//輸出屬性
alert("人家才" + pm.age + "歲,我是一個" + pm.skill + "猿");

 

因為JS一些特性實現一個多態也非簡單

 

//共用函數
//$.oop.newClass = function (obj) {
//    function Create() {
//        if (obj != null)
//            return obj();
//    }
//    var c = new Create();
//    return c;
//}

var iPerson = $.oop.newClass(function () {

    //構造函數
    function person() {

    }
    person.prototype.name;
    person.prototype.iq;
    person.prototype.eat;
    return person;
});

//程式員
var programMonkey = $.oop.newClass(function () {

    //構造函數
    function programMonkey() {

    } programMonkey.prototype = iPerson.prototype ;//繼承
    return programMonkey;
});

//設計濕
var designer = $.oop.newClass(function () {

    //構造函數
    function designer() {

    } designer.prototype = iPerson.prototype ;//繼承
    return designer;
});



var inputValue = "程式員";

var ip = new iPerson();

if (inputValue == "程式員") {

    ip = new programMonkey();
    ip.iq = 0;
    ip.eat = function (msg) {
        alert(msg + "吃香蕉")
    }
    
} else if (inputValue == "設計濕") {

    ip = new designer();
    ip.iq = 100;
    ip.eat = function (msg) {
        alert(msg + "吃香蕉")
    }
}
ip.name = inputValue;
 
ip.eat("我是"+ip.name+"  智力"+ip.iq+" ");
 


 
 

 

根據不同的input Value會執行相應的 eat函數

 


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

-Advertisement-
Play Games
更多相關文章
  • JavaScript構成簡介: 互聯網的出現,極大的促進了信息的交流,隨著步伐的前進,網站的交互需求越來越多,但是受限於當時的軟硬體條件,特別是網路環境的限制,非常簡單的表單驗證都要花費大量的時間在伺服器與客戶端之間進行傳輸,為此網景公司推出了最初的LiveScript語言,後來改名為JavaScr
  • altKey屬性的定義和用法:此屬性返回一個布爾值。指示在指定的事件發生時,Alt鍵是否被按下並保持住了。更多相關內容可以參閱javascript的event對象一章節。語法結構: event.altKey=true|false|1|0 瀏覽器支持:1.IE瀏覽器支持此屬性。2.火狐瀏覽器支持此屬性
  • [1]單選按鈕 [2]多選按鈕 [3]下拉列表
  • 在當今這個多種不同資料庫混用,各種不同語言不同框架融合的年代(一切為了降低成本並高效的提供服務),知識點多如牛毛。雖然大部分SQL腳本可以使用標準SQL來寫,但在實際中,效率就是一切,因而每種不同廠商的SQL新特性有時還是會用到,這部分內容更是讓人抓瞎,常常會由於一些很簡單的問題花很久來搜索準確答案
  • 分類:C#、Android、VS2015; 創建日期:2016-02-07 一、簡介 圖庫(也叫畫廊)是一個佈局小部件,用於在可水平滾動的列表中顯示每一副圖片,當前所選的圖片將置於視圖的中心。 註意:Android已經棄用了這個小部件,棄用的原因是用Galery實現的效率比較低,官方的建議是改為用H...
  • 分類:C#、Android、VS2015; 創建日期:2016-02-07 一、簡介 1、CheckBox 覆選 【Checked】屬性:是否選中。 2、RadioButton 單選 【Checked】屬性:是否選中。 【RadioGroup】屬性:RadioButton的分組容器。註意必須將Rad...
  • 分類:C#、Android、VS2015; 創建日期:2016-02-07 一、簡介 1、Button 常規按鈕。 2、TextView 文本視圖,其功能和WPF的TextBlock控制項類似,【工具箱】中提供的3個組件實際上是同一個TextView控制項用不同的屬性來區分的,這3個不同的屬性在【工具箱...
  • 本篇意在給這幾天Win10 Mobile負面新聞不斷的某軟洗地,想要證明實現一個簡單的下拉刷新並不困難。UWP開發更大的困難在於懶惰,缺乏學習的意願。而不是“某軟連下拉刷新控制項都沒有”這樣的想法。 之前我也沒有進行過下拉刷新的研究。於是先去google了幾篇blog學習了一下,然後再看了某軟官方的S
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...