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。如果是一个对象,那么就默认通过(这就是偷渡)。所以注意你写在构造函数中的返回值。
热门评论
http://yalishizhude.github.io/about/
我觉得你应该把这种现象的具体代码写下来分析我们也许知道也许会明白你想要传递的知识,拿我来说吧,没有代码看你的文章三遍也不知道那种你说深入的new感觉,因为我没敲过你的代码。