2 this全局函数使用:对于全局的方法调用,this指向的是全局对象window
2.1 function Person(name) {
this.name = name;
console.log(this); =window
console.log(this.name); =aaa
}
var p = Person('aaa');
解:参数是什么?参数就是变量!变量即是储存在内存的!
2.2 var name='123';
function globalTest() {
var name = "globalTest this";
console.log(this); = window
console.log(this.name); =123
}
globalTest();
解:仔细比对2.1和2.2,在name时候改变了一点,var name和this.name;
3. this 构造函数使用,构造函数就是一个空白对象,this指向构造函数!
3.1
function showName() {
this.name = "showName ";
}
var obj = new showName();
console.log(obj.name); =showName
3.2
var name = "globalName";
function showName() {
this.name = "showName ";
}
var obj = new showName();
console.log(obj.name); =showName
console.log(name); =globalName
3.3
function Obj(){
this.x=1;
this.y=2;
this.func=function(){
return 'this is a test function';
};
}
var o1=new Obj();
var o2=new Obj();
alert(o2.func===o1.func); =false
alert(o2.func()===o1.func()); =true
解析:o2.func===o1.func结果返回false;这里要正确理解函数和函数的区别
A里面的函数和B里面的函数,即使代码一样,也是不同的,你可以概括为引用不同。地址指针不同!
o2.func()===o1.func()结果返回true,这里是函数运行后的结果,已经是结果了
所以相同都是this is a test function!
3.4
function test() {
this.x = 1;
}
var obj = new test();
var objj = new test();
alert(obj.x===objj.x); =true
解释:属性和方法在保存在对象里面是不同的,这点可以映射到内存上,属性更多是值,方法是函数!
二者不能混为一谈!
3.5下面来一段终极必杀技可以猜猜效果,代码如下:
var a=11
function test1(){
this.a=22;
let b=function(){
console.log(this.a);
};
b();
}
var x=new test1();
这里面的b() 会执行,对象this会是window;
通常说指向了这个新的构造函数,但是,里面的b函数,执行了。。。