如何掌握JS的面向对象扩展
Admin 2022-10-14 群英技术资讯 293 次浏览
1、数组类的扩展
在JS中,数组类Array 作为一个比较重要的数据结构。我们来看下它的原型下都有些什么?
我们在浏览器控制台打印Array. prototype 可以列出来它的所有的方法。
其实有一些方法可能很实用,但是它没有提供,这时候就是需要我们自己去做一下扩展了。
比如,数组的去重。我们给Array的原型上扩展一个unrepeat方法。
一般来说,为了避免我们自定义的方法与Array的内置方法冲突。我们应该这样做。
这里需要注意的是在扩展的自定义方法unrepeat里面的this指向的就是数组对象本身。其实就是我们在类的原型下访问this ,这个this就是指向的类的实例对象,即 [1,2,3,4,1,2,3,4]
再来举个例子:清空数组
2、函数类的扩展
我们在JS中定义函数通常以 function fn(){}这样来定义一个函数,其实我们也可以通过new Function来创建,只是不建议,所以我们知道,函数也有对应的类应该就是Function。
接下来我们通过扩展Fucntion原型方法去更改this的指向。
更改this的指向?
没错!在JS中,我们不是已经可以用call和apply来改变this的指向吗?接下来要实现的和call、apply不太一样。
call和apply在改变this指向的时候,会立即调用该函数。而我要实现的是在调用的时候才会去改this指向。
其实这一功能在我们的ES5中已经现成的方法 bind
我们先来看下在Es5中bind的用法,然后我们去实现一个和bind一样的功能的方法。
当我们直接调用test的时候,这时候,其实我们是调用的 window .test 那么方法里面的this应该就是指向的window对象。
而当我们在调用test之前使用了bind去将this指向改成了 json 对象,这时候test方法里面的this就指向了json对象,那么再去访问this.a 就是相当于json.a 结果返回123
接下来我们手动撸一个这样的自定义函数bind1.
Function.prototype.bind1 = Function.prototype.bind1 || function(_this){}
内部原理其实就是通过原生的apply来改变this指向,但是不立即调用,所以我们需要返回一个新的函数。
这里面涉及到了部分的ES6语法,这里就不展开了。
这里面有一个问题:我们返回的function 是一个 匿名函数 ,我们需要将他的原型指向外层函数的原型,同时还需要指定匿名函数的 constructor
接下来我们来改造一下它
到这里,我们自定义的bind1函数就完美实现啦。
在ES6之前,虽然说没有给我们提供类的直接定义,但是却将class关键字保留出来了,而在新的ES6标准中,已经为我们实现的用class来定义一个类
语法:
这种定义方法和java、php很相似了。render方法为我们自定义的方法,在ES5中相当于是挂载到原型上的方法了。
注意:这里我们在 实例化 类的时候,是直接调用的constructor 构造方法 。思考一个问题:
当我们typeof Ball的时候,会返回什么?
ES6类的继承
相比于ES5的继承,在ES6就简单多了,我们只需要在类的后面加上 extends 关键字然后再跟上要继承的父类即可。我们可以这样写
这继承和php,java一个样儿
注意:我们在继承父类的时候,子类中的构造方法中必须调用super()方法
1、基于面向对象特点扩展原生的JS类的方法
2、手写出了自定义的bind函数,(这也是面试过程中的高频面试题)
到此,关于“如何掌握JS的面向对象扩展”的学习就结束了,希望能够解决大家的疑惑,另外大家动手实践也很重要,对大家加深理解和学习很有帮助。如果想要学习更多的相关知识,欢迎关注群英网络,小编每天都会给大家分享实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是jQuery禁止鼠标滚轮事件的方法。一般我们在浏览网页的时候,能够通过鼠标滚轮实现上下滚动,但是有些场景下我们需要禁止滚动时间,对此下文就给大家来讲解鼠标滚轮事件的禁用和开启,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
本文实例为大家分享了JS实现二级菜单效果的具体代码,供大家参考,具体内容如下
今天给大家分享的是关于基于jQuery封装的拖拽事件,下文有详细的代码及注释,对大家学习和理解封装以及拖拽事件都有一定的帮助,有需要的朋友可以参考。
本文主要介绍的是vue项目中怎么样追踪数据变化的内容,下文有具体的实现代码及方法,对大家学习和工作都有一定的参考价值,需要的朋友可以了解看看。
这篇文章我们来了解jQuery中元素增加属性值的方法,给元素增加属性值是JavaScript学习中比较基础的内容,在jQuery中可以利用attr()方法来实现,下面我们来详细的了解看看怎样做,有需要的朋友可以参考。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008