prototype(JavaScriptDateprototype属性)

本文实例讲述了jsprototype深入理解及应用。分享给大家供大家参考,具体如下:上一篇讲了js的prototype概念,在这里回顾一下prototype的定义:prototype是函数的一个属性,并且是函数的原型对象。引用它的必然是函数,这个应该记住。但是,很奇怪,各位看官,你有没有看过类似下面这样引用prototype的js代码:咦???看着上面这行代码,你是不是对prototype只是属于

 

prototype(JavaScriptDateprototype属性)

 

本文实例讲述了jsprototype深入理解及应用。分享给大家供大家参考,具体如下:

上一篇讲了js的prototype概念,在这里回顾一下prototype的定义:

prototype是函数的一个属性,并且是函数的原型对象。引用它的必然是函数,这个应该记住。

但是,很奇怪,各位看官,你有没有看过类似下面这样引用prototype的js代码:

prototype(JavaScriptDateprototype属性)

 

咦???看着上面这行代码,你是不是对prototype只是属于函数产生深深的怀疑呢?

你明白上面那个函数的意思吗?我还是解释一下吧。

call是函数的一个方法,关于这个方法,它也是只有····函数····才能够调用的,它的作用是:调用引用它的函数。

就拿这个Array.prototype.slice.call(arguments,1)来讲,这里面包含太多信息了,我一个个分析一下。

slice(start[,end])是js的一个原生数组函数,作用是获取数组中从start下标开始到end下标结束的元素。举个例子:

prototype(JavaScriptDateprototype属性)

 

arguments是js函数对象的一个属性,作用是获取函数的实参,返回的是一个以函数实参为属性元素的对象。举个例子:

prototype(JavaScriptDateprototype属性)

 

关于函数的对象属性arguments这里就讲这么多了,要详细理解,可以百度。

而Array是js中生成数组的关键字。

这里为什么要用Array.prototype来调用slice函数呢?而不用Array.slice,原因很简单,因为数组的关键字Array不能这样子Array.xx直接调用js的数组函数。但为什么不能直接这样调用呢?不急,下面我们来做实验,你就会很清楚了。

prototype(JavaScriptDateprototype属性)

 

这里直接给你报错了,说明了什么?呵呵,这说明Array关键字确实不能直接调用数组的函数。

prototype(JavaScriptDateprototype属性)

 

这里返回都是空数组···[]···,说明了什么?说明了Array关键字确实是可以调用prototype函数的属性的,同时也说明js是可以这样子Array.prototype调用js的数组函数的。

说到这里,问题就来了,我上面不是说,prototype是js函数的一个属性,只能被函数调用吗?怎么这里Array关键字可以调用这个属性prototype呢?那么,我这不是坑自己对prototype的定义是错误的吗?我这不是给自己打脸吗?哎,看官,没错,你这里看到的都是正确的。可是,至于Array关键字可以调用函数的prototype属性,我有没有给自己打脸,这里,我们先别急得下结论。

转个弯说,看官是否还记得js生成数组的几种方式?应该有多种,但,我这里就不介绍了。

不过,你是否看过这样生成数组的方式?我们先来看下面的代码:

prototype(JavaScriptDateprototype属性)

 

这个方式生成数组还记得吧?那么,我们js的function是不是也可以像下面这样子生成对象呢?

prototype(JavaScriptDateprototype属性)

 

上面生成数组的方式和下面构造函数生成对象的方式是不是很相似?没错,js中function和Array都是可以通过new来生成对象这样的东西,这说明了什么呢?你看Array()和func()是不是很像?是不是zui后面都有一对圆括号?是就对了,呵呵,说了这么多,我只是想揭露一样东西,这个东西就是,假如我猜的的没有错的话,Array()这个东西其实是js一个·····构造数组的内置函数····,不然,可以用newArray()的方式生存数组的方式就说不过去了是吧?

讲到这里,我们再返回来说js可以这样子Array.prototype调用prototype就很明白不过了是吧?Array()是js的一个内置函数,既然Array是一个函数,那么Array肯定拥有prototype这个属性对吧?所以说,Array关键字调用prototype并没有违反prototype是函数的一个属性这个原则,prototype是函数的一个属性依然是一个不变的结论。

关于Array生成数组的方式,类似的我们是否可以这样子newObject()生成对象,或者newString()这样子生成字符串?既然可以这样子构造对象和字符串,那么我们下面的代码也应该是可行的,对吧?

prototype(JavaScriptDateprototype属性)

 

根据上面的解释,你应该知道这里是可以执行的吧?你应该知道这里的之所以能执行的原理吧?你自己试试。这里就不再解释了。

讲到这里,哎,我既然把行文开始的那个函数给忘了?这里讲解一下本文开始那个func函数的作用:

func函数的作用就是,从第二个实参数开始获取func函数的实参。

我来给你分析一下:

prototype(JavaScriptDateprototype属性)

 

Array.prototype是一个空数组,

Array.prototype.slice()的意思是一个空数组调用数组的函数slice(),

Array.prototype.slice.call()的意思是call函数调用数组的函数slice(),

这里call()怎么调用slice()呢?

是这样子的,Arguments获取func函数实参列表,生成一个对象传递给call()函数,call函数又把Arguments生成的对象传递给Array.prototype这个空数组,把第二个参数···1···传递给slice函数,然后,call就让引用它的函数slice执行slice(1),所以slice就从1下标开始获取数组的元素了,而这个数组的元素其实就是Arguments的元素,因此,这个函数func的作用就是获取下标为1开始的所有实参。不相信,你自己可以执行一下上面的函数。

下面讲讲prototype的应用:

应用1:

给原型对象增加函数,就是让对象拥有公用的函数。

例子:我给数组原型对象增加一个打乱数组方法:

prototype(JavaScriptDateprototype属性)

 

你可以尝试着再增加一个数组arr3看看它能不能调用shuffle函数,因为我这里是给Array的原型对象增加的函数,所以在这个脚本内,所有数组都拥有shuffle这个函数。

应用2:

给原型对象增加属性,也就是给对象增加公用的属性

例子:

prototype(JavaScriptDateprototype属性)

 

应用3:

实现原型继承;

prototype(JavaScriptDateprototype属性)

 

关于prototype就讲到这里,假如本文有什么错误,还望各位看官指出,我好纠正。

特别指出:

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

版权声明:本文图片和内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送联系客服 举报,一经查实,本站将立刻删除,转转请注明出处:https://www.soutaowang.com/15651.html

(0)
kunkun
上一篇 2021年11月12日
下一篇 2021年11月12日

相关推荐

  • 很小众却很惊艳的个性签名

    很小众却很惊艳的个性签名 干净又很美好的唯美签名大全在孤独前行中,有人对你抛冷眼,甚至嘲笑你,你是放弃,还是坚持,就要看你的决心。 1、真诚一点 慢慢来 会好的 你又不差 2、别老…

    百科 2022年10月14日
    01.0K
  • 2022年武汉四价疫苗三针一共多少钱

    目前武汉市四价宫颈癌疫苗仍处于紧缺状态,主要是由于它属于美国疫苗,产量低,售价仅次于九价疫苗。2021年接种四价HPV疫苗的费用单剂为832元,三针接近2500元,实际以到社区卫生…

    2022年8月1日
    0360
  • 10种bb霜推荐(全球热门BB霜排行榜前十名)

      BB霜全名为Blemish Balm,一种介于彩妆及保养的化妆品,由于可以同时兼顾隔离、防晒、遮瑕等效果,十足的便利性深受女性消费者的欢迎。本文10种bb霜推荐(全球热门BB霜…

    2022年10月25日 百科
    0389
  • visa卡号生成器和安全码大全(有效的visa卡号)

    信用卡是当今社会不可或缺的一种消费工具,信用卡上有一串神秘的数字,这串数字就是安全码,那么信用卡的安全码是什么?有什么用? 一、信用卡安全码 信用卡安全码,是信用卡在进行网络或电话…

    2021年10月7日
    02.0K
  • 亚马逊日本站免费推出CSBA服务!

      亚马逊日本站为专业销售计划账户卖家提供客服服务 Customer Service by Amazon (CSBA),目前该客服服务免费。   根据您的授权和同意,亚马逊客服将代…

    2022年6月12日
    0114
  • 不良贷款率计算公式(银行成本收入比计算公式)

    阅读提示:对外转让是金融不良资产较为常见的处置手段,监管文件对于金融不良资产转让有一些特殊规定,以下是重要内容节选,与大家分享。金融不良债权转让监管规则节选1、《金融资产管理公司条例》 (国务院令第297号、2000年11月10日实施)第二十六条 金融资产管理公司管理、处置因收购国有银行不良贷款形成的资产,应当按照公开、竞争、择优的原则运作。金融资产管理公司转让资产,主要采取招标、拍卖等方式。金融

    百科 2021年11月25日
    0465