JavaScript精粹基礎(chǔ)進階(9)OOP面向?qū)ο缶幊?下)

轉(zhuǎn)載請注明出處

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序設(shè)計、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了將樂免費建站歡迎大家使用!

原文連接http://blog.huanghanlian.com/article/5b698f22b8ea642ea9213f51

我們怎么去模擬重載,在javasceipr中我們可以通過參數(shù)的類型區(qū)別或者數(shù)量的區(qū)別,來去讓同樣一個函數(shù)名字,可以根據(jù)不同的參數(shù)列表的情況來去調(diào)用相應(yīng)的函數(shù)。

javascript中函數(shù)類型是不確定的,并且參數(shù)的個數(shù)也是可以任意的,那么我們可以通過判斷實際傳入的參數(shù)的個數(shù),來去做一個模擬的重載,

OOP(模擬重載、鏈式調(diào)用、模塊化)

模擬重載

    function person() {
        var args = arguments;
        if (typeof args[0] === 'object' && args[0]) {
            if (args[0].name) {
                this.name = args[0].name;
            }
            if (args[0].age) {
                this.age = args[0].age;
            }
        } else {
            if (args[0]) {
                this.name = args[0];
            }
            if (args[1]) {
                this.age = args[1];
            }
        }
    };
    person.prototype.toString = function() {
        return "姓名:" + this.name + "年齡:" + this.age
    }

    var peng = new person({
        name: "繼小鵬",
        age: 23
    });
    console.log(peng.toString()); //姓名:繼小鵬年齡:23

    var peng1 = new person("是你", 23);
    console.log(peng1.toString()); //姓名:是你年齡:23

調(diào)用子類方法

例子1

    if (!Object.create) {
        Object.create = function(proto) {
            function F() {};
            F.prototype = proto;
            return new F();
        };
    }

    function person(name) {//基類
        this.name=name;
    }
    person.prototype.init=function(){
        console.log("你好"+this.name)
    }

    function student(name,classname){   //學生類
        this.classname=classname;
        person.call(this,name);
    }

    student.prototype = Object.create(person.prototype);
    student.prototype.constructor = student;

    student.prototype.init=function(){
        console.log("你好s"+this.name)
    }

    var peng=new student("繼小鵬","class2");
    console.log(peng);
    peng.init();

例子2子類調(diào)用基類方法

function person(name) {//基類
    this.name=name;
}

function student(name,classname){   //學生類
    this.classname=classname;
    person.call(this,name);
}

person.prototype.init=function(){
    console.log(this.name)
}

student.prototype.init=function(){
    person.prototype.init.apply(this,arguments);
}

var peng=new student("繼小鵬","class2");
console.log(peng);
peng.init();

鏈式調(diào)用

function classman() {}
classman.prototype.addClass = function(str) {
    console.log('calss' + str + 'added');
    return this;
}
var mang = new classman();
mang.addClass('classA').addClass('classB').addClass('classC')

// calssclassAadded
// calssclassBadded
// calssclassCadded

使用jq的時候$("#id").addClass('df')
選擇器做些操作后在繼續(xù)addClass('df')還可以再做動作一層層鏈式去調(diào)用。

例子解釋

function classman() {}   //現(xiàn)定義一個構(gòu)造器classman
classman.prototype.addClass = function(str) {   //給classman構(gòu)造器prototype添加addClass屬性方法
    console.log('calss' + str + 'added');   //輸出表示添加一個class
    return this;  //return this表示返回classman的實例因為返回了實例那么緊接著后面不需要加mang.addClass('classA')直接后面加.addClass('classB').addClass('classB')就可以,每次執(zhí)行完都會返回實例
}
var mang = new classman();
mang.addClass('classA').addClass('classB').addClass('classC')

// calssclassAadded
// calssclassBadded
// calssclassCadded

抽象類

function Detectorlse() {
    throw new Error("Abstract class can not be invoked directly!");
}
Detectorlse.detect = function() {
    console.log('Detcetion starting...');
}
Detectorlse.stop = function() {
    console.log('Detector stopped');
}
Detectorlse.init = function() {
    throw new Error("Error");
}

function linkDetector() {};
linkDetector.prototype = Object.create(Detectorlse.prototype)
linkDetector.prototype.constructor = linkDetector;

//...add methods to LinkDetector...

defineProperty(ES5)

function Person(name) {
    Object.defineProperty(this, 'name', {
        value: name,
        enumerable: true
    });
};
Object.defineProperty(Person, 'arms_num', {
    value: 2,
    enumerable: true
});
Object.seal(Person.prototype);
Object.seal(Person);

function student(name, classname) {
    this.classname = classname;
    Person.call(this, name);
};
student.prototype = Object.create(Person.prototype);
student.prototype.constructor = student;

var peng = new Person('繼小鵬');
console.log(peng);

var han = new student("汗", "class2");
console.log(han);

模塊化

定義簡單模塊化

var moduleA;
moduleA=function(){
    var prop=1;
    function func(){};
    return {
        func:func,
        prop:prop
    }
}();

定義簡單模塊化2

var moduleA;
moduleA = new function() {
    var prop = 1;

    function func() {};
    this.func = func;
    this.prop = prop;
}();

實踐(探測器)

當前名稱:JavaScript精粹基礎(chǔ)進階(9)OOP面向?qū)ο缶幊?下)
標題來源:http://www.kartarina.com/article28/jecpjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊網(wǎng)站維護網(wǎng)站導航網(wǎng)頁設(shè)計公司小程序開發(fā)品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
主站蜘蛛池模板: 久久久久亚洲精品无码系列| 亚洲av中文无码乱人伦在线r▽| 无码人妻一区二区三区免费看| 亚洲av日韩av无码av| 亚洲国产精品无码久久九九大片| 国精品无码A区一区二区| 中文无码亚洲精品字幕| 亚洲精品无码AV人在线播放| 无码AV大香线蕉| 69久久精品无码一区二区| 中文字幕在线无码一区| 真人无码作爱免费视频| 亚洲av无码片vr一区二区三区| 亚洲国产AV无码专区亚洲AV| 亚洲人成无码网WWW| 免费看无码自慰一区二区| 精品久久久久久无码专区不卡| 日韩人妻无码精品专区| 伊人久久无码精品中文字幕| 日韩精品中文字幕无码专区| 一本久道综合在线无码人妻| 亚洲成av人片不卡无码| 在线看无码的免费网站| 亚洲AV无码专区国产乱码电影| 国产精品无码素人福利不卡| 色视频综合无码一区二区三区| 亚洲国产成人无码AV在线影院 | 2014AV天堂无码一区| 无码人妻精品一区二区蜜桃百度| 无码亚洲成a人在线观看| 久久精品aⅴ无码中文字字幕重口| 亚洲AV无码一区东京热久久| 亚洲精品无码AV人在线播放| 亚洲精品无码午夜福利中文字幕| 亚洲精品无码鲁网中文电影| 无码精品日韩中文字幕| 精品国产v无码大片在线观看 | 亚洲youwu永久无码精品| 99久久国产热无码精品免费| 中文字幕无码不卡免费视频| 人妻精品无码一区二区三区|