技术标签: 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是一个数组,用来接收当前方法传入的参数。
文章浏览阅读10w+次,点赞16次,收藏85次。String.replace() 在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串语法: stringObject.replace(regexp/substr,replacement)参数:regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不..._string中替换字符串中的某个字符
文章浏览阅读3.3k次。概述编码中会用一些基于Roslyn的编码规范工具 如:StyleCop.Analyzers,但不是每一项规则都是适合自己或团队,所以都会对规则进行微调,但是StyleCop.Analyzers规则默认针对单个项目,我们肯定希望规则统一管理,防止项目间配置不同导致约束不一致。本文将介绍如何将自定义规则应用到整个解决方案。利用Nuget安装StyleCop.Analyzers安装成功后能在..._netcore ruleset
文章浏览阅读797次。新手前后端分离:vue配置跨域完成在config->index.js中配置在组件中发起ajax请求,根据你的路径编写得到接口数据:以上的测试用例在 [免费测试接口](http://www.bejson.com/knownjson/webInterface/)遇到的问题:因为我用的是Chrome浏览器,存在缓存干扰,如果更换自己的域,需要清除浏览器的缓存在刷新完成在config->in..._vue跨域 后端配置
文章浏览阅读8.8k次,点赞3次,收藏28次。目的:因为需要保存一个大大的.mp4视频,以防过程中设备出现异常导致整个长长的视频无法正常保存,所以采用分段保存视频的方式,每500帧保存一段,然后再将视频合到一起.最近刚开始学习python,发现python真的很好用,所以这次就使用python中的moviepy库来完成视频的合并.一.安装moviepy1. 你首先尝试使用 pip install moviepy指令是否可以正常安装moviepy库(我在python2.7上和python3.7上都尝试了这中安装方式都安装不了,所以不得不采用下面这_python中如何安装moviepy.editor
文章浏览阅读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
文章浏览阅读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
文章浏览阅读1.4k次。由于AVAudioRecorder不能录制编码为MP3,所以就需要我们将录音后的音频文件格式进行转换(注意:AV Foundation和Core Audio提供对MP3数据解码的支持,但是不提供对其进行编码。所以我们要借助第三方库进行MP3编码)。如何转换?lame无疑是一个很好的选择,lame是一个开源音频压缩软件,目前是公认有损质量MP3中压缩效果最好的编码器。接下来直奔主题,介绍一下如何使用_ios mp3 lame转码
文章浏览阅读264次。DOM 操作1.创建新节点createDocumentFragment() //创建一个 DOM 片段createElement() //创建一个具体的元素createTextNode() //创建一个文本节点2.添加、移除、替换、插入appendChild() //把节点插入到父节点的末尾removeChild() //删除dom节点replaceChild() //替换dom节点insertBefore() //在已有的子节点前插入一个新的子节点3.比较isSameNod_js dom filter
文章浏览阅读5.8k次,点赞9次,收藏25次。题目描述:***商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。具体销货情况如下:具体要求及题目提示:代码如下:#include <iostream>using namespace std;class Sale{ float num = 0;..._3.商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在
文章浏览阅读222次。近日,在 InfoQ“开发者生态共创计划”中,神策数据凭借大数据领域的前沿实践积累和高质量的技术内容输出,荣获“2020 InfoQ 最佳技术社区驱动力”奖项。作为大数据分析与营销科技服务提供商,神策数据自成立以来,始终秉承“把事情做到极致”的精神,不断调整产品方法论和整体信息架构,补充产品功能,完善产品易用性。目前,神策数据已成功为证券、银行、保险、品牌零售、汽车、游戏、企业服务、在线教育、电商等 30+ 细分行业 1500 多家企业提供数据分析和数字与营销服务,并总结出了一套基于数据流的企..._社区驱动奖
文章浏览阅读3.2k次。#触摸屏调试平台:ubuntu12.04LTSAndroid开发板型号:飞凌6818核心板电阻触摸屏型号:tsc2007##基础知识##调试过程###修改触摸屏驱动修改触摸屏分辨率(\kernel\drivers\input\touchscreen\tsc2007.c)保证触摸屏与显示屏分辨率相同,本例中为1024*768,修改如下: #define LCD_SCREEN_X..._tsc2007
文章浏览阅读5k次,点赞2次,收藏15次。由于我现在正试图用Numpy来实现 Lattice Boltzmann me_流场后处理有什么比较难解决的数学问题