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 相关文章推荐
理解Javascript_10_对象模型
Oct 16 Javascript
JS绘制生成花瓣效果的方法
Aug 05 Javascript
基于jQuery实现的美观星级评论打分组件代码
Oct 30 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
Jan 27 Javascript
深入理解jquery跨域请求方法
May 18 Javascript
js获取html的span标签的值方法(超简单)
Jul 26 Javascript
Bootstrap datepicker日期选择器插件使用详解
Jul 26 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
Jul 18 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
Dec 25 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
JS代码编译器Monaco使用方法
Jun 11 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 Javascript
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读取IMAP邮件
2006/10/09 PHP
php安全配置 如何配置使其更安全
2011/12/16 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php Session无效分析资料整理
2016/11/29 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
一段批量给页面上的控件赋值js
2010/06/19 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Python编写屏幕截图程序方法
2015/02/18 Python
Python多线程实现同步的四种方式
2017/05/02 Python
Python登录注册验证功能实现
2018/06/18 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
django框架中间件原理与用法详解
2019/12/10 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
Python文件操作方法详解
2020/02/09 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
环境科学专业个人求职的自我评价
2013/11/28 职场文书
关于青春的演讲稿
2014/05/05 职场文书
长江三峡导游词
2015/01/31 职场文书
师德承诺书2015
2015/04/28 职场文书
python单元测试之pytest的使用
2021/06/07 Python
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB