`

9 通过call()和apply()重新定义执行环境

 
阅读更多

通过前面学习,已知道this对象的环境是如何随着函数被赋值给其它对象而相应改变的。

我们过可以使用Function对象的call()与apply()方法改变this指向(环境)
例如:
  对象.方法.call(环境对象)

  obj.say.call(window)
  或
  obj.say.apply(window)

 
  
call()与apply()的区别是在参数上,如果sya()方法有参数
  obj.say.call(window,args1,aegs2,...) say()方法的参数,每一个都要写在括号内
  obj.say.apply(window,arguments)  arguments是参数数组,是Function的属性,可直接使用.
  
写一个通用一点的方法,包括对不定数量的参数的处理

//
//把函数func,的上下文环境改为obj对象
//
function bindFunction(obj,func)
{
 return function(){
  func.apply(obj,arguments);
 };
}

 

分享到:
评论

相关推荐

    caohonghai#docs#手动实现apply call bind1

    // 定义一个全局变量var obj = {a: 2} // 定义一个对象用来绑定// 定义一个函数用来执行Function.prototype._call =

    JavaScript中的this/call/apply/bind

    改变指向二、Function.prototype.bind()三、call/apply1.定义2.语法3.异同 一、this 1.什么是this this 关键字在大部分语言中都是一个重要的存在,JS中自然不例外,其表达的意义丰富多样甚至有些复杂,深刻理解this...

    JS中this的指向以及call、apply的作用

    在具体的实际应用中,this 的指向无法在函数定义时确定,而是在函数执行的时候才确定的,根据执行时的环境大致可以分为以下3种: 1、当函数作为普通函数调用时,this 指向全局对象 2、当函数作为对象的方法调用时...

    ie支持function.bind()方法实现代码

    ie 原生支持 function 对象的 call 和 apply 方法,在 firefox 或其它浏览器下也得到支持,但是 call 和 apply 方法是立即作用并执行,例如: 代码如下: var func = function () { alert(this); }.apply...

    this和执行上下文实现代码

    函数的执行上下文由当前的运行环境而定: 1. 全局变量和全局函数附属于全局对象(window),因此使用”var”或”this”两种方法定义全局变量是等效的。... 使用call和apply可以改变对象的执行上下文。 看下面的例子: 代

    JS函数的定义与调用方法推荐

    先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来执行方法,this即指当前的myobject对象。 var blogInfo={  blogId:123,  blogName:werwr,  showBlog:function(){alert(this.blogId&#...

    JS的引入及阻塞加载 + 数据类型 + 函数三大特性 (知识小结)

    arguments函数的三大特性函数的 call 和 apply函数的bind函数this指针 一,JS引入及阻塞加载 引入js的方式 第一种:嵌入代码 console.log('我是嵌入的代码'); 第二种:引入外部文件 js的加载方式 阻塞加载:先从...

    JavaScript函数内部属性和函数方法实例详解

    函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind()、toString()、toLocaleString()、valueOf() 其他的目前不熟,后面再补充 1. 函数内部属性 在函数内部,有两个特殊的对象,arguments和this。...

    javascript文档

    &= 运算符 对变量和表达式执行按位“与”运算,结果赋给变量。 && 运算符 对两个表达式执行逻辑连接运算。 * 运算符 将两个表达式的值相乘。 *= 运算符 将变量与表达式的值相乘,结果赋给变量。 + 运算符 将两个...

    JScript 语言参考

    &= 运算符 对变量和表达式执行按位“与”运算,结果赋给变量。 && 运算符 对两个表达式执行逻辑连接运算。 * 运算符 将两个表达式的值相乘。 *= 运算符 将变量与表达式的值相乘,结果赋给变量。 + 运算符 将两个...

    微软JavaScript手册

    &= 运算符 对变量和表达式执行按位“与”运算,结果赋给变量。 && 运算符 对两个表达式执行逻辑连接运算。 * 运算符 将两个表达式的值相乘。 *= 运算符 将变量与表达式的值相乘,结果赋给变量。 + 运算符 将两个...

    javascript this用法小结

    这个特性在给我们带来迷惑的同时也带来了编程上的 自由和灵活,结合apply(call)方法,可以使JS变得异常强大。2.变化的this 在JavaScript中,this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象...

    tech-prep:一组有用的编程主题和链接

    例子资源承诺资源函数表达式与声明call() 与 apply() 未定义与空赋值和比较运算符类型自执行功能关闭例子资源面向对象编程类和实例继承与多态命名空间资源节点资源模块化异步模块定义 (AMD) CommonJS (CJS) 资源...

    JavaScript完全自学宝典 源代码

    2.16.html apply方法与call方法的使用。 第3章(\c03) 示例描述:学习JavaScript的高级语法。 3.1.html 连接字符串。 3.2.html indexOf()函数与lastIndexOf()函数。 3.3.html 截取字符串的子串。 ...

    《javaScrip开发技术大全》源代码

    第9章(\代码\第09章) • sample01.htm 布尔对象与布尔值 • sample02.htm 布尔值隐式转换为布尔对象 • sample03.htm 布尔值与布尔对象的区别 • sample04.htm 复制一个布尔对象 ...

    jquery插件使用方法大全

    可以用来添加不向外部公开的方法,或者对jQuery的某些方法进行重新定义以提供新功能,或者提供更好的封装、避免名称空间冲突。当然,也可以用来开发插件,但Resig强烈建议在开发插件之前,先考虑jQuery UI widget...

    AJAX 源码范例

    06/6.1.6.html prototype原型对象范例 06/6.2.6.html 函数的apply、call方法和length属性范例 06/6.2.7.html 深入认识JavaScript中的this指针范例 06/6.3.2.html 使用prototype对象定义类成员...

    精通JS脚本之ExtJS框架.part2.rar

    4.4.1 Function.call()/apply()方法 4.4.2 函数的作用域 4.4.3 Ext.lib.Event事件 4.4.4 Ext.util.Observable事件 4.4.5 Ext.EventManager事件 4.4.6 Ext.EventObject事件 4.5 各种事件登记方式 4.5.1 传统式...

    精通JS脚本之ExtJS框架.part1.rar

    4.4.1 Function.call()/apply()方法 4.4.2 函数的作用域 4.4.3 Ext.lib.Event事件 4.4.4 Ext.util.Observable事件 4.4.5 Ext.EventManager事件 4.4.6 Ext.EventObject事件 4.5 各种事件登记方式 4.5.1 传统式...

Global site tag (gtag.js) - Google Analytics