深入javascript中的new操作符
javascript中有一个特殊的操作符new,当我们使用这个操作符对一个函数进行操作时会返回一个对象,怎么做到的呢?下面我就帮大家解析下。
下面来具两个例子来说明: function Foo(){this.name = 'mao'; this.age = 20;} var foo = new Foo;此时我们new这个函数的时候可以加()也可以不加,为什么结果一样呢?这就涉及到javascript解释引擎了。
当javascript的解释引擎如V8,在遇到new操作符的时候会先创建一个空的对象,就上面的例子就是 var foo = {};然后采用每一个函数都有的方法apply,既是Foo.apply(foo, arguments);结果就出来了。
以为这样就完了吗?没有!我们会发现一个奇怪的现象 就是构造函数中的return。当我们return一个原始类型的时候,浏览器不会给你返回你想要返回的值。而你return的是一个对象的时候却会返回你想要返回的值,这又是怎么回事呢?这里会涉及到返回的时候一个判断,因为在你使用new操作符的时候,引擎会默认你肯定是想要获得一个对象,所以返回值就只能是个对象,如果不是对象那么他会将返回值改成return this。如果是一个对象,那么就默认通过(这就是偷渡)。所以注意你写在构造函数中的返回值。
点击查看更多内容
3人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦