Javascript 五个特性介绍_es14 特性-程序员宅基地

技术标签: javascript 五个特性  

一、apply介绍

1、apply是前端javascript方法默认自带的方法,这要的用法是替换掉当前执行的方法的this对象,从而实现继承,或者修改方法内部使用到this对象;

这次先说继承:

例如:

首先,在test方法里边声明两个方法,add,sub:

function test(){

this.add=function(a,b){

return a+b;

}

this.sub=function(a,b){

return a-b;

}

}

然后,我们接着定义一个方法test2:

function test2(){

 test.apply(this);

}

接着,我们生成实例t2,实例化过程中test2成为t2的构造函数,此时test2方法里头的this对象是指t2的;

var t2=new test2();

那么现在,我们可以测试t2:

t2.add(2,1);

t2.sub(3,2);

结果是不是很神奇。

2、apply有一个重要的特性就是改变当前执行的方法的this对象;

例如:

<input type='file' id='test'/>

首先我们定义一个检测文件后缀名的方法,此时的this对象是指向window,我们看下边的两个测试例子:

function checkFileType(){

var _value=this.value;

var pattern=/\.[a-zA-Z]$/;

var result=pattern.exec(_value);

if(result!=null)

console.log(result);

else

console.log('not find');

}

那么现在我们就使用apply:

 

$("#test").click(function(){

checkFileType();

});

 

$("#test").click(function(){

checkFileType.apply(this);

});

此时我们会发现,第一个打出的是not find,第二个正确的打印出了附件后缀名。

到此就介绍完了apply两个核心用法,继承与改变当前执行方法的this对象。

二、prototype特性

prototype是前端方法默认自带的属性,主要的用处是在实例之间共享方法;例如:

function test(){};

test.prototype.add=function(a,b){

return a+b;

}

test.prototype.sub=function(a,b){

return a-b;

}

var t1=new test();

var t2=new test();

t1.add(2,1);

t2.add(3,2);

t1.sub(2,1);

t2.sub(3,2);

从上面的例子,我们可以看到t1,t2两个实例都可以调用到add,sub这两个方法;

三、this对象

由于javascript是解释型语言,所以this只有在执行中才能确定。

在实践中我们可以总结出this的规律,this指向当前方法所属的实例:

 1、例如:function test(){

console.log(this);}

test();

此时我们发现this指向window,因为test()是定义在window里边的方法,即我们可以这样调用window.test(),也就是说test是window的方法。

2、test.prototype.add=function(){

console.log(this);}

var tt=new test();

tt.add();

此时,我们定义了一个实例tt,add是实例tt的一个方法,我们会发现this指向tt。

3、结合juqery使用

我们常常见到:$("#xx").click(function(){

console.log(this);

});

此时this是指向("#xx")实例的,有兴趣可以抽出源代码看看()是jquery的一个工厂方法,返回的是一个实例。

上面的例子,click方法属于("#xx")实例的因此,click内部的this指向("#xx")。当click调用回掉方法时,会使用fn.apply(this),因此我们在回掉方法打印出来的this是指向$("#xx")的。

四、arguments

在javascript里边arguments是一个数组,用来接收当前方法传入的参数。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hahajchahajc/article/details/47316157

智能推荐

String.replace() 替换字符串中指定的字符_string中替换字符串中的某个字符-程序员宅基地

文章浏览阅读10w+次,点赞16次,收藏85次。String.replace() 在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串语法: stringObject.replace(regexp/substr,replacement)参数:regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不..._string中替换字符串中的某个字符

netcore将StyleCop.Analyzers自定义规则应用到整个解决方案_netcore ruleset-程序员宅基地

文章浏览阅读3.3k次。概述编码中会用一些基于Roslyn的编码规范工具 如:StyleCop.Analyzers,但不是每一项规则都是适合自己或团队,所以都会对规则进行微调,但是StyleCop.Analyzers规则默认针对单个项目,我们肯定希望规则统一管理,防止项目间配置不同导致约束不一致。本文将介绍如何将自定义规则应用到整个解决方案。利用Nuget安装StyleCop.Analyzers安装成功后能在..._netcore ruleset

新手前后端分离:vue配置跨域_vue跨域 后端配置-程序员宅基地

文章浏览阅读797次。新手前后端分离:vue配置跨域完成在config->index.js中配置在组件中发起ajax请求,根据你的路径编写得到接口数据:以上的测试用例在 [免费测试接口](http://www.bejson.com/knownjson/webInterface/)遇到的问题:因为我用的是Chrome浏览器,存在缓存干扰,如果更换自己的域,需要清除浏览器的缓存在刷新完成在config->in..._vue跨域 后端配置

python之moviepy库的安装与使用_python中如何安装moviepy.editor-程序员宅基地

文章浏览阅读8.8k次,点赞3次,收藏28次。目的:因为需要保存一个大大的.mp4视频,以防过程中设备出现异常导致整个长长的视频无法正常保存,所以采用分段保存视频的方式,每500帧保存一段,然后再将视频合到一起.最近刚开始学习python,发现python真的很好用,所以这次就使用python中的moviepy库来完成视频的合并.一.安装moviepy1. 你首先尝试使用 pip install moviepy指令是否可以正常安装moviepy库(我在python2.7上和python3.7上都尝试了这中安装方式都安装不了,所以不得不采用下面这_python中如何安装moviepy.editor

npm ERR! syscall spawn git-程序员宅基地

文章浏览阅读7k次,点赞2次,收藏3次。在进行npm install 时,有一个项目报下面的错误,其它项目没有报错,分析可能同git有关系,但是git又能正常使用。逐进到项目目录下面,直接使用git bash here这个窗口中,执行npm i,即可成功Lenovo@LAPTOP-DLK5GAMB MINGW64 /d/***/svnfile/dblzvue1$ npm inpm ERR! path gitnpm ERR! code ENOENTnpm ERR! errno ENOENTnpm ERR! syscall spawn _npm err! syscall spawn git

解决Tensorflow2.0出现:AttributeError: module 'tensorflow' has no attribute 'get_default_graph'的问题-程序员宅基地

文章浏览阅读7.4w次,点赞71次,收藏111次。问题描述在使用tensorflow2.0时,遇到了这个问题:AttributeError: module ‘tensorflow’ has no attribute ‘get_default_graph’这个报错的意思是:tensorflow模块没有get_default_graph属性错误原因这是由于Keras API(https://keras.io/)有多个实现,包括原始和参考实..._attributeerror: module 'tensorflow' has no attribute 'get_default_graph

随便推点

iOS 音频转码 使用lame转为MP3格式_ios mp3 lame转码-程序员宅基地

文章浏览阅读1.4k次。由于AVAudioRecorder不能录制编码为MP3,所以就需要我们将录音后的音频文件格式进行转换(注意:AV Foundation和Core Audio提供对MP3数据解码的支持,但是不提供对其进行编码。所以我们要借助第三方库进行MP3编码)。如何转换?lame无疑是一个很好的选择,lame是一个开源音频压缩软件,目前是公认有损质量MP3中压缩效果最好的编码器。接下来直奔主题,介绍一下如何使用_ios mp3 lame转码

dom属性和JS中的dom操作_js dom filter-程序员宅基地

文章浏览阅读264次。DOM 操作1.创建新节点createDocumentFragment() //创建一个 DOM 片段createElement() //创建一个具体的元素createTextNode() //创建一个文本节点2.添加、移除、替换、插入appendChild() //把节点插入到父节点的末尾removeChild() //删除dom节点replaceChild() //替换dom节点insertBefore() //在已有的子节点前插入一个新的子节点3.比较isSameNod_js dom filter

商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。_3.商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在-程序员宅基地

文章浏览阅读5.8k次,点赞9次,收藏25次。题目描述:***商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。具体销货情况如下:具体要求及题目提示:代码如下:#include <iostream>using namespace std;class Sale{ float num = 0;..._3.商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在

恭喜!神策数据荣获“2020 InfoQ 最佳技术社区驱动力奖”_社区驱动奖-程序员宅基地

文章浏览阅读222次。近日,在 InfoQ“开发者生态共创计划”中,神策数据凭借大数据领域的前沿实践积累和高质量的技术内容输出,荣获“2020 InfoQ 最佳技术社区驱动力”奖项。作为大数据分析与营销科技服务提供商,神策数据自成立以来,始终秉承“把事情做到极致”的精神,不断调整产品方法论和整体信息架构,补充产品功能,完善产品易用性。目前,神策数据已成功为证券、银行、保险、品牌零售、汽车、游戏、企业服务、在线教育、电商等 30+ 细分行业 1500 多家企业提供数据分析和数字与营销服务,并总结出了一套基于数据流的企..._社区驱动奖

tsc2007电阻触摸屏调试-程序员宅基地

文章浏览阅读3.2k次。#触摸屏调试平台:ubuntu12.04LTSAndroid开发板型号:飞凌6818核心板电阻触摸屏型号:tsc2007##基础知识##调试过程###修改触摸屏驱动修改触摸屏分辨率(\kernel\drivers\input\touchscreen\tsc2007.c)保证触摸屏与显示屏分辨率相同,本例中为1024*768,修改如下: #define LCD_SCREEN_X..._tsc2007

用Python作流场计算时的后处理问题_流场后处理有什么比较难解决的数学问题-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏15次。由于我现在正试图用Numpy来实现 Lattice Boltzmann me_流场后处理有什么比较难解决的数学问题

推荐文章

热门文章

相关标签