JAVASCRIPT CODE
-
- window.name = "the window object"
-
function scopeTest() {
-
return this.name;
-
}
- scopeTest()
-
var foo = {
- name: "the foo object!",
- otherScopeTest: function() { return this.name }
-
};
- foo.otherScopeTest();
-
var foo_otherScopeTest = foo.otherScopeTest;
- foo_otherScopeTest();
如果你希望将一个对象的函数赋值给另外一个变量后,这个函数的执行上下文仍然为这个对象,那么就需要用到bind方法。 bind的实现如下:
JAVASCRIPT CODE
-
-
Function.prototype.bind = function(){
-
var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift();
-
return function(){
-
return fn.apply(object,
- args.concat(Array.prototype.slice.call(arguments)));
-
};
-
};
使用示例:
JAVASCRIPT CODE
-
-
var obj = {
- name: 'A nice demo',
- fx: function() {
- alert(this.name);
-
}
-
};
- window.name = 'I am such a beautiful window!';
-
function runFx(f) {
- f();
-
}
-
var fx2 = obj.fx.bind(obj);
- runFx(obj.fx);
- runFx(fx2);
参考: http://www.prototypejs.org/api/function/bind PS: 才发现prototypejs的API文档解释的这么详细,一定要花点时间多看看了。 我的简单的实现:
JAVASCRIPT CODE
-
-
Function.prototype.bind = function(obj) {
-
var _this = this;
-
return function() {
-
return _this.apply(obj,
-
Array.prototype.slice.call(arguments));
-
}
-
}
-
var name = 'window',
- foo = {
- name:'foo object',
- show:function() {
-
return this.name;
-
}
-
};
- console.assert(foo.show()=='foo object',
-
'expected foo object,actual is '+foo.show());
-
var foo_show = foo.show;
- console.assert(foo_show()=='window',
-
'expected is window,actual is '+foo_show());
-
var foo_show_bind = foo.show.bind(foo);
- console.assert(foo_show_bind()=='foo object',
-
'expected is foo object,actual is '+foo_show_bind());
|
相关推荐
在闭包中,`this`的指向取决于调用上下文。在上述的`getUserFunction`示例中,`this`在闭包内指向的是`window`,而不是`obj`,因为闭包不是一个对象的方法。如果想让`this`指向`obj`,可以使用`.call`或`.apply`方法...
至此,我们讨论了JavaScript中一些核心的概念,包括对象、函数、原型、继承、执行上下文、作用域和闭包。理解这些概念对于深入掌握JavaScript至关重要。 (17)——补this `this`的绑定策略在JavaScript中比较复杂...
在JavaScript中,理解执行上下文对于解决作用域、闭包、`this`指向等问题至关重要。例如,函数调用时的`this`值取决于其执行上下文,全局上下文中`this`通常指向全局对象,在非严格模式下为`window`,在严格模式下为...
在给出的示例代码中,首先展示了原生JavaScript中bind函数的使用方式: ```javascript var button = document.getElementById("button"); button.onclick = function() { alert(this.id); // 弹出button }.bind...
箭头函数是ES6引入的新语法,它提供了一种更简洁的函数定义方式,并且没有自己的`this`上下文,更符合函数式编程的语义。 通过理解和应用这些概念,开发者可以在JS项目中充分利用函数式编程的优点,提高代码质量...
在JavaScript中,上下文是一个至关重要的概念,它涉及到函数执行、作用域以及闭包等多个方面。理解上下文对于提升编程能力、避免常见错误以及优化代码性能至关重要。 首先,我们要了解JavaScript中的上下文通常指的...
本文将深入探讨JavaScript的核心内容,包括对象、原型链、构造函数、执行上下文、作用域链、闭包以及this指针等关键概念。 1. **对象**: JavaScript中的对象是一种键值对的集合,可以看作是属性的容器。对象可以...
JavaScript中的`bind`函数是一个非常重要的特性,它允许我们固定函数的上下文(this值)以及预先设置函数的参数,从而提供了一种控制函数执行环境的强大工具。在JavaScript中,`this`关键字的值取决于函数调用的方式...
及`this`的值会被确定。首先,`variableObject`会包含函数的`...通过深入理解执行上下文,开发者可以更好地掌握JavaScript中的作用域规则,避免出现未声明变量的错误,以及更好地利用闭包和作用域链来实现特定的功能。
4. 使用Function.prototype.apply方法来动态改变函数的上下文(context)并执行它,apply方法允许你指定一个对象作为函数运行时的this,并传递一个数组作为参数。 文章中提到的bind方法的实现原理,是通过柯里化来...
这个压缩包文件包含了一个名为`main.js`的主要脚本和一个`README.txt`的说明文件,很显然,我们关注的重点是`main.js`,它可能包含了对`bind`函数的使用示例。 `bind`函数主要用途是创建一个新的函数,在新函数中,...
在这个名为"js代码-测试bind函数2"的主题中,我们将深入探讨`bind`函数的工作原理、用途以及如何在实际开发中应用它。 一、`bind`函数的基本概念 `bind`函数是函数对象的一个方法,它的语法为`func.bind(thisArg[,...
接下来,`bind`方法也是用于改变函数调用的上下文,但它返回一个新的函数,而不是立即执行。这意味着你可以预先设置`this`的值,并在未来的任意时间点调用这个新函数。例如: ```javascript function log() { ...
10. **apply和call方法**:这两个方法都可以改变函数调用时的`this`上下文,并允许动态传递参数。`apply`接收一个数组或类数组对象作为参数,而`call`则直接接收参数列表。 以上是对JavaScript函数的深入探讨,理解...
// 获取传入bind函数的参数 return _this.apply(context, args.concat(bindArgs)); // 执行原函数并返回结果 }; }; ``` 在上述代码中,mybind方法会首先检测当前函数是否可以被调用。它接着截取所有除了上下文...
ES6引入了箭头函数,其语法更简洁,且不绑定自己的`this`,而是继承自父级上下文。 ```javascript var add = (a, b) => a + b; ``` 8. **函数参数的rest运算符` rest运算符(`...`)允许你在函数中接受不定...
在这个名为"js代码-测试bind函数"的压缩包中,我们有两个文件:`main.js`和`README.txt`。`main.js`很可能是实现或演示`bind`功能的代码,而`README.txt`可能包含了关于代码的简要说明或使用指南。 `bind`函数的...
在JavaScript中,还可以使用call、apply和bind方法来控制函数调用的上下文,即显式地设置函数内this的值。这些方法接受一个或多个参数,并允许我们调用函数时改变其内部的this指向。例如,obj.sayName().call(obj)会...