JS 操作符优先级及new

2017-09-21  本文已影响0人  _v_xw

基于segmentfault上的一道题

题目

function foo() {
    getName = function () { console.log (1); };
    return this;
}
foo.getName = function () { console.log(2);};
foo.prototype.getName = function () { console.log(3);};
var getName = function () { console.log(4);};
function getName () { console.log(5);}
new foo.getName ();      // 第一种       
new foo().getName ();         // 第二种
new new foo().getName ();       // 第三种
    

由此可以知道new 的优先级带参数的比不带的高

解析

new原理

在第三种解析中我们要计算 new (foo.prototype.getName)()的值,首先要明白new到底做了什么,其实就做了3件事

var obj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj);

第一步:创建一个空对象
第二步:绑定该对象的原型
第三部:调用构造函数 // 执行了构造函数的内容
所以在 new (foo.prototype.getName)()也就会返回foo.prototype.getName的一个实例,并且执行一次构造函数,也就是执行console.log(3),打印3这个结果

上一篇 下一篇

猜你喜欢

热点阅读