js中更改this指向 以及回顾bind、call和apply
1.更改this指向
方法1:对this进行保存
var _this = this;
例: var _this = this;
document.onclick = function(){
console.log(_this)
}
console.log(_this);
方法2:bind 更改this指向。 返回的是一个函数体
注意: fn.bind(document)(); 更改指向必须加()调用。
例1:function fn(){
console.log(this);
}
fn.bind(document)();
例2:var obj = {
show : function(){
console.log(this);
}.bind(document)
}
方法3:call 更改this指向 fn.call(document);
call(this指向,参数1,参数2,参数3,参数4)
function fn1(a,b){
return a + b;
}
function fn2(a,b){
return a * b;
}
var res = fn2.apply(fn1,10,20);
console.log(res);
方法4:apply 更改this指向 fn.apply(document);
apply(this指向,[值1,值2....])
例1:
function fn(){
console.log(this);
}
fn.apply(document);
例2:function fn1(a,b){
return a + b;
}
function fn2(a,b){
return a * b;
}
var res = fn2.apply(fn1,[10,20]);
console.log(res);
总结:
bind call apply区别
所接收的参数不同
call(this指向,参数1,参数2,参数3,参数4)
apply(this指向,[值1,值2....])
2.call和apply回顾
例1:function yasuo(name){
this.name=name;
this.skill=function(name){
console.log(name+'正在使用钢铁斩');
}
}
var have =new yasuo;
hove.skill('亚索'); //亚索正在使用钢铁斩
例2:
function Yasuo(name){
this.name = name;
this.skill=function(){
console.log(this.name+'正在使用轻钢斩');
}
}
function zhaoxin(name){
this.name=name;
Yasuo.call(this,name);
}
var hove=new zhaoxin('赵信');
console.log( hove.skill); //赵信正在使用钢铁斩
例3:
this.name = name;
}
Yasuo.prototype.skill = function(){}
this.name = name;
Yasuo.apply(this)
}
hore.skill('赵信'); //出错,
this.name = name;
this.age = age;
this.id = id;
}
Person.prototype = {
eat: function(){},
sleep : function(){}
}
Person.call(this,name,age,id)
this.houjie = houjie;
this.work = function(){
console.log('男人的工作')
}
}
console.log(wangshuai);
总结: call和apply 都可完成参数传递,
call和apply 常用来继承属性,无法继承prototype内的方法
js中更改this指向 以及回顾bind、call和apply的更多相关文章
- js中修改this指向的方法(call,apply,bind)
前言:call.apply和bind都是为了改变某个函数运行时的this指向的,对于前端人员来说,关于this的掌握程度,直接决定了前端水平的高低.下面我们就来简单浅显易懂的来看一下es5中常用的三种 ...
- js中改变this指向的call、apply、bind 方法使用
前言: 由于js 中this的指向受函数运行环境的影响,指向经常改变,使得开发变得困难和模糊,所以在封装sdk,写一些复杂函数的时候经常会用到this 指向绑定,以避免出现不必要的问题,call.ap ...
- js中this的指向
在js中this的指向对于新手来说一定是个难题,但是如果你真正理解了的话,也就没什么问题啦,下面就来讲讲this吧. JS中,this的值取决于调用的模式(调用对象),而JS中共有4种调用模式: 1. ...
- JS中的this 指向问题
我发现在对JS的学习中有很多朋友对this的指向问题还是有很大的误区或者说只是大致了解,但是一旦遇到复杂的情况就会因为this指向问题而引发各种bug. 对于之前学习过c或者是Java的朋友来说可能这 ...
- 理解js中this的指向
学习自原文 http://www.cnblogs.com/pssp/p/5216085.html后的一点小结(原文作者总结的很棒^_^)! 关于js中this的指向,在函数定义的时候还无法 ...
- 轻松了解JS中this的指向
JS中的this指向一直是个让人头疼的问题,想当初我学的是天昏地暗,查了好多资料,看的头都大了,跟他大战了那么多回合,终于把它搞定个七八分,其实往往都是我们复杂化了,现在就让大家轻松看懂this的指向 ...
- js中 this 的指向
js中 this的指向一共存在3种地方: 1.全局的this; 2.构造函数的this; 3.call/apply; 一.全局的this: function test(){ this.d = 3;// ...
- JS 中的this指向问题和call、apply、bind的区别
this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...
- 彻底理解js中this的指向,不必硬背。
首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...
随机推荐
- C#6.0 新增功能
连载目录 [已更新最新开发文章,点击查看详细] C# 6.0 版本包含许多可提高开发人员工作效率的功能. 这些功能的总体效果是让你编写的代码更简洁.更具可读性. 该语法不像许多常见做法那样繁琐. ...
- java中的堆、栈、方法区等比较
• 堆.栈.方法区 1. java中的栈(stack)和堆(heap)是java在内存(ram)中存放数据的地方 2. 堆区 存储的全部是对象,每个对象都包含一个与之对应的class的信息.(clas ...
- C语言编程入门之--第一章初识程序
第一章 初识程序 导读:计算机程序无时不刻的影响着人类的生活,现代社会已经离不开程序,程序的作用如此巨大,那么程序到底是什么呢?本章主要讨论程序的概念,唤起读者对程序的兴趣,同时对C语言程序与其它语言 ...
- 设计模式:策略模式,Java集合定制排序的核心思想
前言 前阵子面试的时候,有个面试官问我了解哪些设计模式吗?我说了策略模式.接着他问有哪些场景应用,我又回答他jdk的集合工具类有个排序方法就用到了策略模式,也就是java.util包下的Collect ...
- java中代码的注释和快捷
添加必要的注释,对一个有责任心.有道德模范的前端必须具备的好习惯, 可以大大提高代码的可维护性.可读性. java代码注释快捷键:ctrl+shift+/首先熟悉一下html.css.js的注释的写法 ...
- java并发笔记之synchronized 偏向锁 轻量级锁 重量级锁证明
警告⚠️:本文耗时很长,先做好心理准备 本篇将从hotspot源码(64 bits)入手,通过分析java对象头引申出锁的状态:本文采用大量实例及分析,请耐心看完,谢谢 先来看一下hotspot的 ...
- 原生应用使用cordova并与h5应用分离
个人原创地址:https://www.jianshu.com/p/1ad536e76640 1.需求与使用场景 打开一个新页面,要求能够加载本地zip格式的h5应用,该应用使用了某些原生能力:能够 ...
- Java编程基础阶段笔记 day06 二维数组
二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...
- 【iOS】[[NSBundle mainBundle] loadNibNamed:nibTitle owner:self options:nil] 异常
这两天照书上的例子写代码时,出现了这个异常. 上网查了不少,有人说链接失效什么的……但发现都不是那些原因,问题出现在下面这句代码: [[NSBundle mainBundle] loadNibName ...
- iOS Xcode6 新建OC Category文件
首先:File -> New File 接下来界面如下,选择Objective-C File,然后Next 在这里选择 Category 即可