this 指向二-----构造函数的this指向

来源:互联网 发布:淘宝店铺流量少的原因 编辑:程序博客网 时间:2024/04/29 23:05

在函数中,this没有作用域和继承的概念,this的指向主要看调用的方式,详情请看this指向一,今天主要撸一撸当new 关键字调用函数时thsi内部的指向,分两种情况:

1.构造函数没有调用return语句或者调用return语句但是没有返回值或者返回一个原始值得时候

当new调用方法时,会创建一个空对象并且试图初始化这个空对象,这时this的指向自然就是指向这个新创建的对象了


2.构造函数有用return显示返回一个对象的时候,这时new 调用方法的返回值就是这个return 的对象,例如

function Person(){

 this.age=18;

this.name="zhangshan";

var self=this;

this.showName=function(){

console.log(this.name);

}

}


var p1=new Person();

p1.showName();//调用这个方法的时候,showName方法的this指向p1,self也是指向p1; 得到的值是zhangshan

但是如果构造函数变成这样:


function Person(){

 this.age=18;

this.name="zhangshan";

var self=this;

this.showName=function(){

console.log(this.name);

}


return {

“age":28,

"name":"lishi",

"showName":function(){

console.log(this.name);

}

}

}


var p1=new Person;//构造函数没有形参时可以省略括号

p1.showName();//调用这个方法的时候,showName方法的this指向p1,self也是指向的是执行new创建并且初始化的空对象; 得到的值是lishi;


总结:不管构造函数是否有return对象,用new执行函数都会创建一个空对象并且试图初始化这个空对象,如果没有return语句或者return语句没有值或者return一个原始值的话

,函数执行的返回值就会是这个新创建的对象。但是,但是,但是如果有return一个对象的话,就会直接返回return的这个对象,不会返回新创建的对象,但是确实有新建一个对象并初始化,上面代码中的self就是永远指向这个新创建的对象,因为在return之前self就已经把this的地址保存起来了,所以不管this指向哪里都不会影响到self。


0 0
原创粉丝点击