很小白的百度知道一下“javascript this”,搜到了这个:
http://zhidao.baidu.com/question/87695812.html?si=2
其中,网友tkocn的回答重点就是这段:(----没考证是原创还是引用)
定义:this是包含它的函数,作为方法被调用时所属的对象。
说明:这句话有点咬嘴,但一个多余的字也没有,定义非常准确,我们可以分3部分来理解它!
1、包含它的函数。2、作为方法被调用时。3、所属的对象。
那就对这段发挥一下吧。
貌似这段话里“作为方法”这四个字可以去掉,改成这样:
定义:this是包含它的函数,在被调用时所属的对象。
说明:这句话有点咬嘴,但一个多余的字也没有,定义非常准确,我们可以分3部分来理解它!
1、包含它的函数。2、在被调用时。3、所属的对象。
先看以下代码:
var dbl=function(n){
this.dblValue=n*2;
window.alert('n是几?'+n);
window.alert('this是谁?'+this.name);
}
问题也就两个。
“n是几?”,很好解答:n是函数参数,调用函数时传几就是几。
“this是谁?”,其实也很好回答,this是主人,谁调用函数就是谁。
上面两个回答里都有“调用函数”,
那我们看下,通常调用函数会有哪些方式:
dbl(1); //静态方式调用,看不到调用主人。this由js引擎决定,在浏览器里,粗略的当作window吧
new dbl(2); //new 方式调用,会临时new出一个对象,并将this指向它。
var jk={name:'JK'};
jk.dbl=dbl;
jk.dbl(3); //“.”方式调用。这一句很清楚啊,主人就是jk指针所对应的对象。因为在调用时,是通过jk.xx找到那个函数的。简而言之,就是“.”前面的对象
dbl.call(jk,4); //因为this指向谁,是js引擎的潜规则(假设那咬嘴的定义我们明白不了)。所以js提供一些明规则,让我们指定“this”是谁。
dbl.apply(jk,[5]); //类似于call。区别只是指定arguments的方式不一样。
document.body.addEventListener('click',dbl);//然后点击document.body。//这也是一个典型代表:我们肉眼看不出浏览器是如何使用我们添加的监控,所以我们只那去找浏览器的相关文档。
明白了以上,那再看以下
var tom={name:'Tom',friend:jk};
tom.friend.dbl(6); //按第3条,主人是tom.friend
var Cls=function(name){
this.name=name;
};
Cls.prototype.dbl=dbl;
Cls.prototype.dbl(7); //按第3条,主人是Cls.prototype
var jim=new Cls('Jim');
jim.dbl(6); //按第3条,主人是jim
var funX=function(n){
dbl(n); //按第一条,主人是window
};
理解得差不多了吧。
不过,还没有。
还是回到这一句:“定义:this是包含它的函数,在被调用时所属的对象”
最后一个单词是“对象”,
dbl.call(null,11); //我想把this指定成null可以吗?----好像不可以哦,别人要的是对象啊,传null或undefined,就会被忽略。
dbl.call(1,12); //传一个值,可以吗?----可以传,但是最后跟你传进来的可能会有点差别:会把它转化成对应的对象。
执行一下以下代码看看效果:
var fun=function(){
alert(['this是:'+this,'typeof结果:'+(typeof this),'constructor是:'+this.constructor,'this===window?:'+(this===window)].join('\n'));
}
var arr=[null,undefined,true,1,'hello',fun,{}];
for(var i=0;i<arr.length;i++) fun.call(arr[i]);
分享到:
相关推荐
NULL 博文链接:https://sailinglee.iteye.com/blog/740206
javascript大事托付的用法及其好处简析_.docx
Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...
主要介绍了javascript实现自动填写表单的方法,以一个简单实例形式分析了JavaScript结合浏览器设置实现自动保存表单的相关技巧,需要的朋友可以参考下
UBIFS文件系统简析,从MTD层、UBI层、UBIFS层及与VFS层接口等方面详细介绍了UBIFS文件系统的实现原理和核心源码,原创文章近300页,供大家交流探讨
2022中国创新药市场研究简析.pdf 2022中国创新药市场研究简析.pdf 2022中国创新药市场研究简析.pdf 2022中国创新药市场研究简析.pdf 2022中国创新药市场研究简析.pdf 2022中国创新药市场研究简析.pdf 2022中国创新药...
5G NR PRACH信道和随机接入流程简析V2.0 春天工作室的PPT
简析linux内核的内核执行流程
STL简析STL简析STL简析基础学习STL简析基础学习STL简析基础学习STL简析基础学习STL简析基础学习STL简析基础学习
简析搜索引擎实现原理简析搜索引擎实现原理简析搜索引擎实现原理简析搜索引擎实现原理简析搜索引擎实现原理
Web3.0概念下的场景生态简析.pdf
英国EYFS体系简析.pdf英国EYFS体系简析.pdf英国EYFS体系简析.pdf英国EYFS体系简析.pdf英国EYFS体系简析.pdf
简析运用云计算重构广东科技人才数据库.pdf
2018年短视频行业发展简析.pdf
大数据时代乡村旅游电子商务发展路径简析.pdf
简析搜索引擎中网络爬虫的搜索策略
android descendantFocusability用法简析