构造函数返回值问题

1、请问p.name是:
var fun = function(){
    this.name = 'ling';
    return {
    	name: 'ge'
    };
}

var p = new fun();

考察的是构造函数的返回值的问题, 每个函数都有返回值,如果使用了return语句,则返回return后跟的值,如果没有使用return,则默认返回undefined.
特别的,如果这个函数是构造函数,则默认返回this对象,如果构造函数内使用了return语句,并且return后跟的是一个对象,则这个构造函数返回的是这个对象,否则返回this.

所以题中的p = {name: 'ge'},因此p.name=ge

2、请问p.name是:
var fun = function(){
    this.name = 'ling';

    return 'ge';    
 }

var p = new fun();

由于返回值不是对象,因此,返回this。输出结果:p = {name: 'ling'},因此,输出结果为ling

修改prototype上的属性问题
1、请问a.info.name和b.info.name分别是
var fun = function(){}

fun.prototype = {
    info : {
    	name : 'linge',
    	age : 12
    }
}

var a = new fun();
var b = new fun();

a.info.name = 'hello';
b.info.name = 'tom';

两个都输出tom。首先你要知道原型模式的执行流程:

1.先查找构造函数实例里的属性或方法,如果有,就立即返回。
2.如果构造函数的实例没有,就去它的原型对象里找,如果有,就立即返回

由于构造函数中没有info属性,因此,a.info.name = ‘hello’;就是给原型的info的name设置为hello。首先要查找有没有info属性,才能给实例的某个属性赋值,于是找到了原型上。第二次,还是构造函数没有,去原型找,b.info.name = 'tom’将原型的info的name改为tom,由于info是对象,引用地址相同,最终二者获取结果都是tom。

a.info.name这段代码,首先去访问了实例对象本身是否有info这个对象,发现没有就去原型上查找了,发现原型上有,所以地址共享了得到的值都是Tom;

2、请问a.info.name和b.info.name分别是:
var fun = function(){
    this.info = {
    	name : 'linege',
    	age : 20
    }
}
var a = new fun();
var b = new fun();

a.info.name = '功夫';
b.info.name = '熊猫';

a.info.name功夫b.info.name熊猫

由于构造函数有,就不再去原型查找,new之后都会创建新的实例对象,他们this各自指向各自创建新对象中。互不影响。因此,输出各自的。

3、请问a.name和b.name分别是:
var fun = function(){}

fun.prototype = {    
    name : 'ling',    
    age : 20
}

var a = new fun();
var b = new fun();

a.name = 'nginx';
b.name = 'mobx';

a.name输出nginx,b.name输出mbox。

a.name实例本身没有,给当前a这个实例对象执行赋值操作,没有去访问原型上的name。就相当于第1题先访问了原型上的info对象,第3题没有访问过程,只是在实例上添加了name属性值。

4、请问a.info.name和b.info.name分别是:
var fun = function(){
    this.info = {
    	name : 'ling',
   		 age : 20
    }
}

fun.prototype = {
    info : {
    	name : 'ling',
    	age : 20
    }
}

var a = new fun();
var b = new fun();

a.info.name = 'dog';
b.info.name = 'cat';

a.info.namedogb.info.namecat。 这个是由于自身有info属性,都不会去原型找,由于new以后各自info地址都不同,因此,输出各自的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值