JS的封裝函數

1.封裝hasPubProperty公有屬性

Object.prototype.hasPubProperty = function (key) {
    if ((key) in this && !this.hasOwnProperty(key)) {
        return true;
    }
    return false;
}
複製代碼

2.封裝myPop,去掉末尾項

Array.prototype.myPop = function () {
    let temp = this[this.length - 1];
    this.length--;
    return temp;
    }
複製代碼

3.封裝myUnique數組去重

Array.prototype.myUnique = function () {
    var obj = {};
        for (var i = 0; i < this.length; i++) {
            if (obj.hasOwnProperty(this[i])) {
                this.splice(i, 1);
                i--;
            } else {
                obj[this[i]] = this[i]
            }
        }
    }
複製代碼

4.封裝myPop去除最後數組一項

Array.prototype.myPop = function () {
        let temp = this[this.length - 1];
        this.length--;
        return temp;
    }
複製代碼

5.封裝myPush在末尾項增長

Array.prototype.myPush = function () {
        var l = ary.length;
        for (var i = 0; i < l; i++) {
            this[this.length] = ary[i];
        }
        return this;
    }
複製代碼

6.封裝myCall方法等同於call

Function.prototype.myCall = function myCall(context, ...arg) {
        context = context || window;
        let a = Symbol();
        context[a] = this;
        let res = context[a](...arg);
        delete context[a];
        return res;
    }
複製代碼

7.封裝myApply方法等同於apply

Function.prototype.myApply = function myApply(context, arg) {
        arg = arg || [];
        context = context || window;
        let a = Symbol();
        context[a] = this;
        let res = context[a](...arg);
        delete context[a];
        return res;
    }
複製代碼

8.封裝myBind方法等同於bind

Function.prototype.myBind = function (context, ...arg) {
        var _this = this;
        return function (...ary) {
            return _this.apply(context, arg.concat(ary))
        }
    }
複製代碼

9.封裝myNew方法等同於new

function myNew(classN, ...arg) {
        var obj = {};
        obj.__proto__ = Person.prototype;
        var res = Person.call(obj, ...arg)
        return typeof res === 'object' ? res : obj;
    }
複製代碼

10.封裝myInstance方法等同於instanceof

function myInstance(temp, classN) {
        let str = typeof temp;
        if (str !== 'Object' && str !== 'Function') return false;
        var left = temp.__proto__,
            right = classN.prototype;
        while (left) {
            if (left === right) return true;
            left = left.__proto__;
        }
        return false
    }
複製代碼

11.封裝plus和minus方法

Number.prototype.plus = function (a) {
        return this + a;
    }
Number.prototype.minus = function (a) {
        return this - a;
    }
複製代碼

12.封裝一個判斷數據類型的方法getType

Object.prototype.getType = function () {
        var str = this.constructor.toString();
        str = str.slice(9, str.indexOf('('));
        return str.toLowerCase();
    }
複製代碼

13.封裝myReverse方法等同於reverse

Array.prototype.myReverse = function () {
        for (var i = 0; i < this.length / 2; i++) {
            let temp = this[i];
            this[i] = this[this.length - 1 - i];
            this[this.length - 1 - i] = temp;
        }
        return this;
    }
複製代碼

14.獲取數組中的最大值

Array.prototype.max = function () {
        // 三種任選其一
        return this.sort((a, b) => b - a)[0];
        return Math.max(...this);
        return Math.max.apply(Math,this);
    }
複製代碼

15.求數組中的平均值

Array.prototype.average = function(){
        return eval(this.join('+'))/this.length;
    }
複製代碼
相關文章
相關標籤/搜索