新手浅谈属性继承

注:本文只适合新手观看,不是新手本宝宝劝你别看,你会觉得侮辱智商。。。

继承这种东西嘛,简单的很的,老师当初给我讲的时候我也听不懂,然后.......

那么注意,正文来了。。。

1.要讲继承,就不得不先说一下 prototype、__proto__ 和 constructor 了

       prototype : 函数中的一个属性,指向原型对象。  通常我们把函数方法写在prototype里。 作用:1.节约内存 2.扩展属性和方法  3.可以实现类之间的继承 。

       __proto__:对象中的一个属性,指向创建这个对象的构造函数的原型对象,对象可以直接访问__proto__里面的属性和方法。

       constructor : 这玩意儿是一个构造器,是原型对象里面的一个重要的属性,指向创建自己的那个函数。

如果你已经看了其它关于这三个属性的视频,或者老师给你讲过你没听明白,那么我相信,上面的介绍你也没看懂。。。其实简单来说呢,就是当你在console打印一个函数时,点开这个函数,就能看到prototype了,然后点开prototype里面就是原型对象的内容,包括方法和constructor,这个constructor又指向了函数本身。      当一个构造函数创建了一个对象时,这个对象里面的__proto__属性就指向了这个构造函数的原型对象,也就是说  this对象.__proto__ ==  this函数.prototype  。  这就是为什么当我们用构造函数创建了一个对象时,这个对象可以使用函数的方法。

   介绍这三种属性主要是为了在继承属性和方法时能正确查找到这些属性和方法。。。

那么注意,继承要开始了。。。。

继承又可以分为属性继承和方法继承,我们先来谈谈属性继承。

      一般情况下可以使用  call  和  apply  来实现函数与函数之间的属性继承,它们的作用是将一个对象的属性传递给另一个对象。

    call()  : 第一个参数是this的指向,第二个参数是需要传递的属性值,多个属性值之间用逗号隔开。(让this指向的对象获得属性)

    apply() : 用法和call()一样,第二个参数可以使一个数组。

    我们可以使用   对象1.属性.call(对象2,属性值)     使对象2实现对对象1属性的继承。看图:

                         

           最后打印结果为:    刘小明正在玩回旋踢

          对象,函数的属性都可以使用call   apply  来继承。  其实它们也可以用来继承方法,但是函数中直接继承方法会形成函数嵌套函数,这对性能优化是不利的,所以不推荐,但是我们脑子转个弯,它们也可以用来实现对不包含某个方法的对象使用这个方法呀!  直接上图:

                         

                          我们都知道使用document.get   方法获取到的多个元素形成了一个伪数组,伪数组是不能使用数组的 slice方法的,但是我们使用call (或者apply) 将数组截取方法给予伪数组 aLi ,使伪数组aLi可以使用数组的slice方法。所以当然截取后的  arr  显示为一个数组 。 

                         

                       案例二:arr是一个数组,而 Math.max 是针对数字的一个方法,我们使用apply将this指向数组,然后对数组arr使用 Math,max方法,最后当然得出最大值是40啦。

以上就是属性继承了。至于方法继承嘛,本宝宝不想写了,下次吧亲。

猜你喜欢

转载自www.cnblogs.com/qq634857/p/9051503.html