javascrpt之this指向問題
阿新 • • 發佈:2017-11-04
window對象 嵌套 疑惑 call 保留 失去 col 它的 param
一:就近原則,this指向當前調用上下文; 也可以理解為局部變量覆蓋全局變量。 如:
var foo = "foo"; var myObject = { foo: ‘Hello World‘ }; var sayHello = function(){ console.log(this.foo); }; myObject.sayHello = sayHello; myObject.sayHello(); // Hello World sayHello();// foo
二: 嵌套函數內部的this都失去方向,都指向了window對象
三:一個疑惑點,javascript中不是function也是對象嗎? 為什麽function裏的this不會指向自己呢?
this指向當前調用上下文!!!!!!!!!!!! 是誰調用它,讓它執行的就指向誰! 自動執行函數,它的this還是指向它的宿主的。
如何實現在嵌套層級中保證this的指向不變?
var myObject = { myProperty: "hello world", myMethod: function(){ console.log(this); // 調用這個方法它才會執行 var that = this; // 當前this指向 myObject 保留this的指向 var helperFunction = function(){ // 嵌套 此時this只想Window object console.log(this); console.log(that.myProperty); // hello world that的指向指向myObject }() } }; myObject.myMethod();// (function hello(){ // alert(this); // })();
四.call apply控制this的指向
var myObject = {}; var myFunction = function(param1,param2){ this.foo = param1; // this指向它的調用上下文 this.bar = param2; console.log(this); // myObject }; myFunction.call(myObject,‘foo‘,‘bar‘) // 與其說call改變了this的指向,不如說this始終指向它的調用上下文而已
javascrpt之this指向問題