我昨天发现了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操作符做了些什么,机制又是如何的?