JS函数this的用法实例分析


Posted in Javascript onFebruary 05, 2015

本文实例讲述了JS函数this的用法。分享给大家供大家参考。具体如下:

在js中写函数时,很多用到this. this究竟是什么,this是个关键字,是个指针,指向执行环境作用域,也称之为上下文。
先说下函数吧,个人理解是函数是在语言中重复调用的代码块.
在JS里,把函数赋值给对象的属性时,称之为方法
如:

var m={};
m.title='title';
m.show=function(){
alert(this.title)
}
m.show()

就是把函数作为对象m的方法来调用
这样的话,this指向的就是m这个对象.

直接调函数名的叫函数:

var a=1212;
function show(){
alert(a)//1212
}
show()// 1212

在全局环境里,可以把全局变量理解为window的属性,全局函数为window的方法
看下面的例子:

var m ={};
m.id='mmm';
m.show=function(){
  alert(this.id);
}
var a={};
a.id='aaa';
a.show=m.show;
a.show(); //aaa

a.show=m.show;  先理解这句话,因为函数是个对象,
m.show=function(){
  alert(this.id)
}

这表达式相当于a.show 与m.show同时引用指向

function(){
  alert(this.id)
}

其实相当于

a.show=function(){
  alert(this.id)
}

所以调用a.show()时,this指向的是a对象,
再看以下一个栗子

var m ={};
m.id='mmm'
m.show=function(){
  alert(this.id)
}
var a={}
a.id='aaa'
a.show=function(){
  m.show()
};
a.show(); //mmm

所以调用a.show()时,相当于调用了m.show()的方法,所以this.指向的是m对象。

再看以下一个例子,一开始还是不很懂

var color='red';
var app = {};
app.color="green";
app.paint=function(node){
node.style.color=this.color;
  alert(this.color);
}
function findNode(callback){
  var btn =document.querySelector('.btn');
  callback(btn);//传进来,
}
findNode(app.paint);
alert(this.color); //red 而不是green

函数传参时,是按值传参的,而不是引用

所以findNode(app.paint);传进来时,其实是

function(node){
  node.style.color=this.color;
  alert(this.color);
}

的引用,又因为findNode是全局定义的,所以this指向WINDOW OR UNDEFINED;

关于传参,按值传递过去的

function show(a){
  alert(a)
}

参数为基本数据类型时好理解

var b=10;
show(b)//alert(10);

至于对象

var c ={};
c.prop=true;
var showProp=function(obj){
obj.prop=false
}
showProp(c); //c.prop = false

有些人觉得是上面例子是按引用传参
其实上面还是按值传参,showProp(c)把c传进函数里时,c其实相当于一个引用, 函数里对obj.prop=false,相当于对引用的对象 改成{prop:false}

再看下面一例子

var c ={};
c.prop=true;
var showProp=function(obj){
  obj = new Object();
  obj.prop=false
  return obj;
}
showProp(c);
alert(c.prop); //true

这里明明把传入obj修改了,如果按照函数按引用传参,函数里面的修改肯定会反映到外部

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

Javascript 相关文章推荐
jquery 获取自定义属性(attr和prop)的实现代码
Jun 27 Javascript
javascript时区函数介绍
Sep 14 Javascript
jquery 实现返回顶部功能
Nov 17 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
解决拦截器对ajax请求的拦截实例详解
Dec 21 Javascript
微信小程序的动画效果详解
Jan 18 Javascript
vue webuploader 文件上传组件开发
Sep 23 Javascript
浅谈webpack编译vue项目生成的代码探索
Dec 11 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
Jul 13 jQuery
解决element ui select下拉框不回显数据问题的解决
Feb 20 Javascript
JS实现前端动态分页码代码实例
Jun 02 Javascript
如何在vue 中引入使用jquery
Nov 10 jQuery
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
Feb 05 #Javascript
js关于命名空间的函数实例
Feb 05 #Javascript
js实现数字每三位加逗号的方法
Feb 05 #Javascript
javascript实现字符串反转的方法
Feb 05 #Javascript
Javascript中拼接大量字符串的方法
Feb 05 #Javascript
jquery操作select方法汇总
Feb 05 #Javascript
高性能JavaScript模板引擎实现原理详解
Feb 05 #Javascript
You might like
浅析php变量修饰符static的使用
2013/06/28 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
python实现sublime3的less编译插件示例
2014/04/27 Python
Python自动发邮件脚本
2017/03/31 Python
儿童学习python的一些小技巧
2018/05/27 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
python实现吃苹果小游戏
2020/03/21 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
你懂得怎么写自荐信吗?
2013/12/27 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
安全生产标语
2014/06/06 职场文书
校园新闻稿范文
2015/07/18 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
2016国庆促销广告语
2016/01/28 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers