我昨天发现了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操作符做了些什么,机制又是如何的?
本文探讨了JavaScript中使用new操作符创建对象时遇到的几种特殊情况,并深入分析了构造函数内部return语句对对象实例的影响。
8453

被折叠的 条评论
为什么被折叠?



