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。如果是一个对象,那么就默认通过(这就是偷渡)。所以注意你写在构造函数中的返回值。
2024 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123