zoukankan      html  css  js  c++  java
  • 原型和原型链的学习

    面向对象底层运行机制

    1.每一个函数(自定义类/内置类/普通对象)都具备一个属性:prototype【原型】,这个属性是一个对象,在这个对象中存储的是,当前类供应给实例调用的公共属性方法,

    2.在prototype这个对象中,内置一个constructor属性,属性值是当前类本身

    3.每一个对象(普通对象/数组对象../实例也是对象/prototype也是一个对象)都具备一个属性__proto__[原型链]属性值是当前对象(实例)所属类的prototype.

    画图了解prototype和__proto__

    原型链 练习1

    答案画图解释1

    原型链 练习2

    答案画图解释2

    原型链 练习3

    答案画图解释3

    函数的三种角色

    1.普通函数

    2 构造函数

    3.普通对象

    底层

    Function作为一个函数是自己类的实例

    基于内置类原型扩展方法

    向内置类的原型上扩展方法,需要注意的点。

    1.为了防止自己设定的方法覆盖内置的方法,我们设置的方法加前缀。

    2:优势,用起来方便,和内置方法类似,直接让实例调用即可。

    3.方法中的this一般是当前操作的实例。

    4.优势:只要保证方法的返回结果是当前类的实例,那么我们可以基于“链式写法”调用当前类中提供的其他方法。(返回结果是谁的实例,就可以继续调用谁的方法)

    在Array原型上添加一个数组去重的内置方法

    利用es6的Set方法

    通过对象来去重

    代码

    // 在Array原型上添加一个数组去重的内置方法
        // 利用es6的Set方法
        Array.prototype.myunique = function myunique() {
            // console.log(new Set(this)) 
            let newArr = Array.from(new Set(this))
            return newArr
    
        }
    
        // 通过对象来去重
        Array.prototype.myuniquea = function myuniquea() {
            let obj = {}
            for (let i = 0; i < this.length; i++) {
                obj.hasOwnProperty(this[i]) ? (this[i] = this[this.length - 1],this.length--,i--) : obj[this[i]] = this[i]
            }
            obj = null;
            return this
    
        }
    
        let arr = [1, 1, 2, 3, 2, 3, 3, 4, 5, 4, 4]
        console.log(arr.myunique())
        console.log(arr.myuniquea())
    
    

    内置方法的缺点

    for in遍历对象,所有可枚举的属性都可以被遍历到。所以处理 for in 循环的时候 ,我们需要加hasOwnProperty判断。

  • 相关阅读:
    【OpenJudge 2.5-1792】这绝壁是一道玄学题!【DFS】
    【BZOJ1034】省队选手不务正业打泡泡堂(我也不知道是啥算法)
    文件操作的常用方法和使用
    数据类型所有方法和使用整理之------字典
    数据类型所有方法和使用整理之------列表
    用类的内置方法实现类型检查
    类的内置方法及描述符
    用python实现MRO算法
    RHEL6.5 DHCP服务器搭建
    Python之禅 吾心笃定
  • 原文地址:https://www.cnblogs.com/loveliang/p/14047953.html
Copyright © 2011-2022 走看看