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 基础知识 被自己遗忘的
Oct 15 Javascript
JavaScript arguments 多参传值函数
Oct 24 Javascript
Jquery带搜索框的下拉菜单
May 06 Javascript
jQuery中live()方法用法实例
Jan 19 Javascript
D3.js实现直方图的方法详解
Sep 25 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
Oct 27 Javascript
JS中去掉array中重复元素的方法
May 26 Javascript
详解a++和++a的区别
Aug 30 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
Aug 15 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
Jan 29 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
javaScript中indexOf用法技巧
Nov 26 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获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
2007/01/29 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
JS实现队列的先进先出功能示例
2017/05/10 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
详解Python中的正则表达式
2018/07/08 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
python 如何实现遗传算法
2020/09/22 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
初一科学教学反思
2014/01/27 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
培训班开班主持词
2015/07/02 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
创业计划书之寿司
2019/07/19 职场文书
图文详解matlab原始处理图像几何变换
2021/07/09 Python