用call()和apply()改变this的指向,那什么时候用this呢?(构造函数),那为什么要用构造函数呢?(为了生成对象)。

1.解决函数内this指向的问题

(1)var that/_this=this;在函数外提前声明一个变量

(2)通过call()和apply()改变this的指向

2.call()和apply()的区别

用法是一样的,但是参数形式不一样

call()  :   fn.call(obj,a,b)

apply()   :   fn.apply(obj,[a,b])

二者均代表的是将函数内的this换成Obj后再调用

3.bind()修改函数内的this

fn.bind(bind,a,b)  bind的用法只是改变了this的指向,但是并没有调用

如果调用fn.bind(bind,a,b)()

案例:

function fn(){

  this.names="zhang",

  console,log(this.names)

}

var obj={

  names="li"

}

fn.call(obj);

结果输出还是"zhang”

分析:

var obj={

  names="li"

}

就相当于>>>

function fn(){

  this.names="zhang"

  console.log(this.names)

}

fn.prototype.name="li"

fn()

fn.call(obj)是fn继承了obj中的所有的属性,只要是继承的可以看成是公有的,天生自带的是私有的,在使用时,有了私有就不会使用共有的

也可以得出:call() apply()都可以看成是继承

改变this的指向问题;的更多相关文章

  1. JavaScript中this的用法 及 如何改变this的指向

    要懂得JavaScript中this的用法,首先需要知道,JavaScript中的作用域相关知识. var fun = function(){ var flag = 1; console.log(fl ...

  2. this指向详解及改变它的指向的方法

    一.this指向详解(彻底理解js中this的指向,不必硬背) 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是 ...

  3. 3种方法改变this的指向

    <body>     <div style="width: 200px;height: 200px;hotpink;"></div>     & ...

  4. this指向问题(改变它的指向)

    这个问题倒不是面向对象的,而是今天遇到js面向对象的时候一个例子的时候突然遇到了,call()方法,然后自己突然发现竟然忘记了,查了之后整理如下: xxx.call((对象名),参数a,参数b) xx ...

  5. 函数高阶(函数,改变函数this指向,高阶函数,闭包,递归)

    一.函数的定义方式 1.函数声明方式 function  关键字(命名函数) 2.函数表达式(匿名函数) 3.new  Function( ) var  fn = new  Function(‘参数1 ...

  6. bind改变this的指向

    <script type="text/javascript"> var Hello = function(){ this.setT = function(){ wind ...

  7. react的事件处理为什么要bind this 改变this的指向?

    react的事件处理会丢失this,所以需要绑定,为什么会丢失this? 首先来看摘自官方的一句话: You have to be careful about the meaning of this ...

  8. 函数中,对形参做不加var的全局溢出赋值,可改变形参所指向的实参的本身值

    var formateNumArr = function(arr,defaultVal){     var a = [];     $.each(arr,function(i,v){          ...

  9. 可以改变this指向的方法

    this一般指向的是当前被调用者,但也可以通过其它方式来改变它的指向,下面将介绍三种方式: 1.call用作继承时: function Parent(age){ this.name=['mike',' ...

随机推荐

  1. Ubuntu 下解压tar.xz方法

    参考地址:https://www.cnblogs.com/baby123/p/6611169.html

  2. python selenium 定制启动Chrome的选项注意事项(十九)

    自动化测试的时候为了避免每个case均需要登录的操作,所以把登录后的cookie信息保存下来,在有效期内使用cookie的方式实现登录操作,为了避免展现太多的登录操作,需要通过设置浏览器的option ...

  3. ubuntu-docker入门到放弃(八)创建支持SSH服务的镜像

    我们知道进入docker容器可以使用attach.exec等命令来操作和管理,但是如果需要远程登录并管理容器,就需要ssh服务的支持了. 1.基于commit命令创建 docker提供了commit命 ...

  4. c# HashTable (哈希表)

    HashTable 哈希表 也是System.Collections集合下的数据结构类 它储存的也是Object类型的对象 但是它在内存中是散列排布的 因为这个特性,非常适合存储大量的数据 在Hash ...

  5. [sharepoint]修改Item或者File的Author和Editor

    写在前面 最近项目中调用sharepoint rest api方式获取文件或者Item列表,而用的方式是通过证书请求,在上传文件,或者新建item的时候,默认的用户是在sharepoint端注册的用户 ...

  6. Vue 路由及路由默认跳转

    路由就是让根组件动态得去挂载其他组件: 步骤: //路由配置: //.安装 npm install vue-router --save / cnpm install vue-router --save ...

  7. 爬虫:输入网页之后爬取当前页面的图片和背景图片,最后打包成exe

    环境:py3.6 核心库:selenium(考虑到通用性,js加载的网页).pyinstaller 颜色显示:colors.py colors.py  用于在命令行输出文字时,带有颜色,可有可无. # ...

  8. python中定义的颜色

    平时学习工作中,我们经常会接触到一些大佬写的Python实用工具,运行起来总会显示出五颜六色的背景,相关的定义在matplotlib模块中,为方便使用,这里给大家展示一下在这个模块中都定义了哪些选颜色 ...

  9. 使用Jenkins部署Python项目

    廖大使用Fabric部署的.我使用Jenkins试试部署过程.虽然说是用python项目部署测试的,但其他项目也是同理的. 参考Jenkins+Python部署完整版,不过安装方式不同. 安装tomc ...

  10. 20165205 2017-2018-2 《Java程序设计》课程总结

    20165205 2017-2018-2<Java程序设计>课程总结 每周作业链接总结 预备作业一: 简述了我认为好的师生关系,展望了未来学习java的日子 预备作业二:总结了C语言的学习 ...