JS构造函数返回值问题

1.js构造函数返回值问题

  1. 构造函数本不应该,不需要有返回值,实际执行的返回值就是此构造函数的实例化对象
  2. 但是在 js 中构造函数可以有返回值也可以没有,没有时,和正常的构造函数一样,返回实例化对象
  3. 返回值是非引用类型,如基本类型(string,number,boolean,null,undefined)则与无返回值相同
  4. 返回值是是引用类型,则实际返回值为这个引用类型,就会出现问题

注意:构造函数中的 this 指向实例化的对象,所以构造函数通过 this 给实例添加属性和方法

function foo(name){
    return name
}
// 1. 返回值为非引用类型
// a为foo构造函数实例化出来的一个空对象
var a = new foo('字符串')
console.log(a)                // foo{}
console.log(typeof a)         // 'object'
a.__proto__ == foo.prototype  // true

// 2. 返回值为引用类型
// b为返回的引用对象,不属于构造函数的实例了
var b = new foo({name:'对象'})
console.log(b)                // {name:'对象'}
console.log(typeof b)         // 'object'
b.__proto__ == foo.prototype  // false

2.牛客网面试题

  1. 我们来看下牛客网的一道题
  2. String(‘foo’) 返回的是string类型,非引用类型,所以不会影响,因为构造函数没有属性,返回一个空对象
  3. new String(‘foo’) 返回的是字符串对象,所以会返回该字符串对象
console.log( 'foo' == new function(){ return String('foo') } )      // false
console.log( 'foo' == new function(){ return new String('foo') } )  // true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值