this指针总结
来源:互联网 发布:excel抓取多页网页数据 编辑:程序博客网 时间:2024/06/05 17:32
文章只是简单列举了方式和一些会改变this指针的情况
1.探寻之,必昭然若揭
- new绑定 this–>新创建的对象
var bar = new foo()
- call/bind 硬绑定 this–>指定的对象
var bar = foo.call(obj2)
- 隐式绑定 this–>上下文对象
var bar = obj1.foo()
- 默认绑定 this–>全局对象window
四种情况也是按照优先级排列的
2.实践之,定了然于胸
2.1 回掉函数会改变this指针
绑定
javascript
dbTools.queryUsrDB2Datas(function(){
usrResDiv.fyDiv.apply(usrResDiv,arguments);
});
2.2 setTimeout/setinterval函数会改变this指针(例子见第三部分)
2.3 绑定的例外
foo.call(null)
使用null
或者undefined
,忽略传入对象的this
,实际运用的是默认绑定,这也是这样方法的弊端,this指向window
。
修改var DMZ = Object.create(null); foo.apply(DMZ,[2,3]);
间接引用
function foo(){ console.log(this.a); } var a = 2; var o = {a:3,foo:foo}; var p = {a:4}; o.foo();//3 (p.foo = o.foo)(); //2 this-->window p.foo(); //4
p.foo = o.foo
返回值是目标函数的引用,因此调用位置是foo(),而不是p.foo()
,o.foo()
;
3.避免之,需谨小事微
除了第一部分的方法外,还有一些常用的方法。
3.1 ES5中我们经常会使用self = this
,如:
function foo(){ var self = this; setTimeout(function(){ console.log(self.a); },100);}var obj = { a:2;}foo.call(obj);//2
3.2 ES6中的箭头函数(this词法)
function foo(){ setTimeout => { console.log(this.a);//this继承来自foo() },100);}var obj = { a:2;}foo.call(obj);//2
0 0
- this指针的总结
- this指针总结
- c++:this指针总结
- 指针类型学习总结-- this指针
- 关于类的this指针总结
- 【C++总结】对象和类,this指针
- node.js js this指针自我总结
- this指针说明举例及总结
- 关于this指针的传递问题总结
- this指针
- this指针
- this指针
- this指针
- this指针
- this 指针
- this指针
- this指针----
- this指针
- SOQL 日付関数
- 差分——括号匹配的应用
- OpenLayers 3实践与原理探究4.4-ol3源码分析-render
- (LeetCode) Ugly Number --- 丑数字
- 购物车小球的实现
- this指针总结
- cocos2dx-lua_修改源码流程
- webpack基础实践1
- JAVA获取时间戳,哪个更快
- mysql group by
- webpack基础实践2
- ubuntu 双击打不开软件或者创建的快捷方式
- 针对eclipse安装spring插件安装失败或者后不显示spring文件或者的解决办法
- webpack项目实践