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());
|
相关推荐
从“原始值和引用值类型及区别”到“EventLoop事件循环&...14. 作用域和作用域链、执行期上下文 15. DOM常见的操作方式 16. Array.sort()方法与实现机制 17. Ajax 17. 垃圾回收 18.JS中的String和Math方法 ······
原因是箭头函数没有独立的执行上下文this;所以箭头函数内部出现this对象会直接访问父级;所以也能看出箭头函数是无法完全替代function的使用场景的;比如我们需要独立的this或者argument的时候 1.2 defineProperty...
NodeCSSJavaScriptJS 基础复杂数据类型JS运算符数据类型检测数据类型转换JS预编译JS原型-原型链JS执行上下文thisJS闭包箭头函数变量、作用域、内存问题高阶迭代器和生成器事件循环机制EventLoop总结JS元编程...
一、call 方法 调用一个对象的一个方法,以另一个对象替换...call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 Js代码
深入js之深究ES6规范前后的执行上下文相关 2018 用 Vue 开发仿旅游站 webapp 项目总结 (下) 用 Vue 开发仿旅游站 webapp 项目总结 (上) 标注图 + 部分举例聊聊 Vue 生命周期 授人以渔式解析原生JS写轮播图 原生...
_proto__执行上下文栈、变量对象、作用域链、this执行上下文闭包变量提升v8垃圾回收call、apply、bind原理及实现创建对象和继承oop编程思想ES6let、const箭头函数Set、Map、WeakSet和WeakMap异步Promise原理及实现...
执行上下文栈和变量对象 作用域链和闭包 this解析 原型和原型链 继承 JS进阶 call和apply模拟实现 bind模拟实现 new模拟实现 深浅拷贝 函数柯里化 防抖和节流 函数递归 ES6 let, const Symbol, Iterator和Map ...