用new创建自定义对象时的疑问

本文探讨了JavaScript中使用new操作符创建对象时遇到的几种特殊情况,并深入分析了构造函数内部return语句对对象实例的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我昨天发现了js的一些奇怪问题,当用new操作符创建自己的对象时。不知有人知道原因吗?

1、我们可以用function创建构造函数,然后用new生成自己的对象。

function book(){
    this.tip="I'm a book";
}
var myBook = new book();

 

上面代码没什么疑问,会生成一个新的对象,myBook来引用它,这个对象有一个属性tip,值为"I'm a book"



2、当我们在构造函数中加入返回语句时

function book(){
    this.tip="I'm a book";
    return {};
}
var myBook = new book();
 

上面在构造函数的最后返回了一个空对象,这时的myBook就是一个空对象,不拥有任何属性。‘this.tip="I'm a book"’就像没起作用。



3、当我们返回的是一个字符串字面量时(数字也可以)

function book(){
    this.tip="I'm a book";
    return "I'm a string";
}
var myBook = new book();
 

按道理推测,这时的myBook就该引用的是字符串对象"I'm a string",但事实上是myBook和1中的一样,引用了一个对象,该对象有一个属性tip,值为"I'm a book",这时的return为什么没用了



4、当我们以另一种方式返回一个字符串时(数字一样)

function book(){
    this.tip="I'm a book";
    return new String("I'm a string");
}
var myBook = new book();
 

这时的myBook引用的就是字符串"I'm a string",这个和3中有什么不同?

所以,我想知道new操作符做了些什么,机制又是如何的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值