1.call
var obj={name:"4"};
var fn1=function(){console.log(this)};
function fn2(){console.log(this)};
fn1.call(obj)
var fn1=function(){console.log(this)};
function fn2(){console.log(this)};
fn1.call(obj)
=>Object {name: "4"}
fn2.call(obj)
fn2.call(obj)
=>Object {name: "4"}
2.
var myObject = {
na:"bar",
func: function() {
var self = this;
console.log(" " + this.na);
(function (){
console.log("inner func: this.na= " + this.na);
console.log("inner func: self.na= " + self.na);
}());
}
};
na:"bar",
func: function() {
var self = this;
console.log(" " + this.na);
(function (){
console.log("inner func: this.na= " + this.na);
console.log("inner func: self.na= " + self.na);
}());
}
};
na="window na";
myObject.func();
=> bar
=> inner func: this.na= window na
=> inner func: self.na= bar
myObject.func();
=> bar
=> inner func: this.na= window na
=> inner func: self.na= bar
-------------------------------------------
var o={
m:function(){
var that=this;
console.log(that);
a();
function a(){
console.log(this)
}
}
}
o.m();
=>Object {}
=>Window {external: Object, chrome: Object, document: document, user_data: Object, is_option: false…}
this上下文只存在两种语义:
一种是被当作方法调用,this指向调用它的对象,(比如上面的that);一种是作为函数调用,指向Global对象,它没有作用域的限制,a由于是作为函数被调用,所以它指向window。