1.函数作为对象的方法被调用(this指向该对象)
var obj={
a:1,
getA:function(){
console.log(this===obj);
console.log(this.a);
}
}
window.name='global';
(1)function getName(){
console.log(this.name);==》global
console.log(this===window);==》true
}
name:'sven',
getName:function(){
console.log(this.name);==》global
console.log(this===myObject);==》false
}
}
var get=myObject.getName;
console.log(get());
2.1有时候我们会遇到一些困扰,比如在div节点的事件函数内部,有一个局部的callback方法,callback被作为普通函数调用时,callback内部的this指向了window,但是我们往往想让它指向改div节点,见如下代码:
window.id="123";
document.getElementById('div1').οnclick=function(){
var that=this;//将that保存起来
console.log(that.id);
var callback=function(){
console.log(that.id);
}
callback();==》div1
}
3.大部分javaScript函数都可以当做构造器使用,构造器的外表和普通函数一样,他们的区别在于被调用的方式。当用new运算符调用函数时,该函数总会返回一个对象,通常情况下,构造函数器里的this就指向返回的这个对象。
var Myclass=function(){
this.name='seven';
}
var obj=new Myclass();
console.log(obj.name);==>seven
3.1但用new 调用构造器时,要注意一个问题:如果构造器显式地返回了一个object类型的对象,那么此次运算结果最终返回这个对象,而不是我们期待的this。
var myClass=function(){
this.name='eleveb'
return {
name:'abb'
}
}
var obj1=new myClass();
console.log(obj1.name);==>abb
3.2主要不是显示地返回一个object类型的对象就不会出现这样子的问题
var myName=function(){
this.name='huang';
return 'anme';
}
var obj2=new myName();
console.log(obj2.name);==>huang
var obj={
a:1,
getA:function(){
console.log(this===obj);
console.log(this.a);
}
}
obj.getA(); ==》1
2.作为普通函数调用(this指向全局对象)window.name='global';
(1)function getName(){
console.log(this.name);==》global
console.log(this===window);==》true
}
getName();
(2)var myObject={name:'sven',
getName:function(){
console.log(this.name);==》global
console.log(this===myObject);==》false
}
}
var get=myObject.getName;
console.log(get());
2.1有时候我们会遇到一些困扰,比如在div节点的事件函数内部,有一个局部的callback方法,callback被作为普通函数调用时,callback内部的this指向了window,但是我们往往想让它指向改div节点,见如下代码:
window.id="123";
document.getElementById('div1').οnclick=function(){
var that=this;//将that保存起来
console.log(that.id);
var callback=function(){
console.log(that.id);
}
callback();==》div1
}
3.大部分javaScript函数都可以当做构造器使用,构造器的外表和普通函数一样,他们的区别在于被调用的方式。当用new运算符调用函数时,该函数总会返回一个对象,通常情况下,构造函数器里的this就指向返回的这个对象。
var Myclass=function(){
this.name='seven';
}
var obj=new Myclass();
console.log(obj.name);==>seven
3.1但用new 调用构造器时,要注意一个问题:如果构造器显式地返回了一个object类型的对象,那么此次运算结果最终返回这个对象,而不是我们期待的this。
var myClass=function(){
this.name='eleveb'
return {
name:'abb'
}
}
var obj1=new myClass();
console.log(obj1.name);==>abb
3.2主要不是显示地返回一个object类型的对象就不会出现这样子的问题
var myName=function(){
this.name='huang';
return 'anme';
}
var obj2=new myName();
console.log(obj2.name);==>huang
4.Function.prototype.call或Function.prototype.apply调用
跟普通的函数调用相比,用Function.prototype.call或Function.prototype.apply可以动态地传入函数的this:
var obj1={
name:'seven',
getName:function(){
return this.name
}
}
var obj2={
name:'hellow'
}
console.log(obj1.getName.call(obj2));==>hellow