Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数在JavaScript中时的instanceof_Javascript - Fatal编程技术网

函数在JavaScript中时的instanceof

函数在JavaScript中时的instanceof,javascript,Javascript,采访中我被问到的第一个问题,老实说,我看到自己真的很困惑,于是就开门了 考虑以下代码片段: 案例a: 案例b: 根据我的理解,函数必须位于ins的原型链中 ins <-- myFunction <-- Function <-- Object insins不是函数的instanceof,因为您将其声明为实例(new myFunction)。因此,它是myFunction的一个实例 只需参考myFunction: var myFunction=function(){}; var

采访中我被问到的第一个问题,老实说,我看到自己真的很困惑,于是就开门了

考虑以下代码片段:

案例a:

案例b:

根据我的理解,函数必须位于ins的原型链中

ins <-- myFunction <-- Function <-- Object

ins
ins
不是函数的
instanceof
,因为您将其声明为实例(
new myFunction
)。因此,它是myFunction的一个
实例

只需参考myFunction

var myFunction=function(){};
var res=document.querySelector(“#result”);
var-ins=myFunction;
res.textContent=['ins instanceof myFunction:',ins instanceof myFunction,
“\nmyFunction instanceof Function:”,myFunction instanceof Function,
“\n ins instanceof函数:”,ins instanceof函数].join(“”)

所以,你已经很接近了,但还不是很接近。原型链实际上如下所示:

ins <-- myFunction.prototype <-- Object

ins您似乎误解了Javascript中的
new

不创建函数的新实例。相反,它创建一个新对象,该对象继承自
myFunction.prototype
,并调用
myFunction
,将对象作为
this
传递给函数

因此,您没有真正创建函数的新实例,您的
ins
不是函数。您可以很容易地通过假装它是:

var myFunction = function(){

}

var ins = new myFunction(); 

ins(); <-- error, ins is not a function
var myFunction=function(){
}
var ins=new myFunction();

ins() 这里的陷阱是假设instanceof操作符是可传递的。你写

ins <-- myFunction <-- Function <-- Object

现在,
x
func
superFunc
的实例,但是
func
不是
superFunc
的实例。在其他语言中,你宁愿说
func
superFunc

子类
ins
甚至不是函数
ins
是一个对象,不是函数,你不能在这里调用
ins()
)@Wouter:但在这一点上,每个函数都必须从对象继承。@ShirgillAnsari:每个函数都从对象继承,true,但不是每个对象都是函数。在这种情况下,情况并非如此
myFunction
是一个构造函数,对它调用
new
会创建一个不是函数的新对象。@major:我不同意“因此,ins不是myFunction的实例”这句话。显然是的。@ShirgillAnsari我只是想指出,
myFunction.prototype
是原型链的终点,而不是直接的
myFunction
,这让我松了一口气。
new myFunction()
var myFunction = function(){

}

var ins = new myFunction(); 

ins(); <-- error, ins is not a function
ins <-- myFunction <-- Function <-- Object
ins <-- Function
myFunction <-- Object
function func() {}
function superFunc() {}
func.prototype = new superFunc();

var x = new func();