Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

JavaScript new运算符的两种优先级

  new是一个运算符,它的用法和一元运算符很相似,优先级也和一元运符算相同。但是这只是new的一部分。其实它的用法有两种,这篇文章就来说说手册上没介绍过的另一种用法的优先级。现在我们有一个很变态的函数A。 function A(){
  return {
    B:function(){
      return {
        toString:function(){
          return "我是B的返回值";
        }
      };
    },toString:function(){
      return "我是A的返回值";
    }
  };
};
  A函数的返回值包含B函数。两个函数的返回值都重写了自己的toString方法,这样输出的时候就很容易知道是哪个实例。这里还有提到一个东西,那就是new一个函数,如果它有返回值,new这个运算符的结果就是那个返回值。现在我们来使用它看看。 alert(A()); //我是A的返回值
alert(new A); //我是A的返回值
alert(new A().B); //function(){...};
  我想前两个结果不会有什么疑问吧,但是第三个结果就很诡异。这时候你可能会怀疑new的优先级,如果new的优先级比点还高确实会有这个输出。没错确实是因为这个引起的。但是并不是说new的优先级比点高,而是new有两种用法。第一种是普通的用法,就和上面代码的第二个结果一样。这种时候它的优先级是仅次于括号(点和括号是同级别的)。但是new还有另一个种用法,那就是输入构造参数的情况。比如上面代码第三个结果的new A(),这种情况下new就有括号的性质,前括号的new关键字,后括号是用来输入构造参数的小括号。

  有了括号性质,优先级就自然排到了和括号同级别的地方。这样,new A()和后面的.B就在同一个优先级上,所以从左到右运算。
网名:
54.224.247.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^