第一个问题是我在采访中被问到的,说实话,我看到自己真的很困惑并且展示了门,
考虑一下片段:
案例a:
var sayHello = new Function("alert('Hello there');"); alert(sayHello instanceof Function); // true alert(sayHello instanceof Object); // true,since every // object inherits from Object
案例b:
var myFunction = function(){ } var ins = new myFunction(); alert(ins instanceof myFunction); // ofcourse,true alert(myFunction instanceof Function); // true alert(ins instanceof Function); // false,Why is this not true?
根据我的理解,函数必须在ins的原型链中?
ins <-- myFunction <-- Function <-- Object
解决方法
你似乎在Javascript中误解了新的.
该
new myFunction()
不会创建该函数的新实例.而是创建一个新对象,它继承自myFunction.prototype并调用myFunction,将对象作为此函数传递给函数.
因此,您还没有真正创建该函数的新实例,您的ins不是函数.您可以通过尝试假装它来轻松验证它:
var myFunction = function(){ } var ins = new myFunction(); ins(); <-- error,ins is not a function
既然它不是一个函数,为什么你会期望函数在它的原型链中呢?