Javascript 检查不同声明对象的instanceof

Javascript 检查不同声明对象的instanceof,javascript,Javascript,我正在阅读如何在JavaScript中声明对象 有基于对象的方法和基于函数的方法。在下面的代码中,我使用object literal创建了一个名为Person1的对象,并使用function-based创建了Person2 然后我尝试检查它们的实例。对于Person2,我得到“true”,但对于Person1,我得到“TypeError:'instanceof'右侧不可调用” 如何使用object literal创建一个对象,并且仍然获得正确的instanceof?您可以这样做,但实际上不应该这

我正在阅读如何在JavaScript中声明对象

有基于对象的方法和基于函数的方法。在下面的代码中,我使用object literal创建了一个名为Person1的对象,并使用function-based创建了Person2

然后我尝试检查它们的实例。对于Person2,我得到“true”,但对于Person1,我得到“TypeError:'instanceof'右侧不可调用”

如何使用object literal创建一个对象,并且仍然获得正确的instanceof?

您可以这样做,但实际上不应该这样做。允许您重载以下行为:

var Person1={
姓名:“约翰”,
[Symbol.hasInstance](实例){
返回实例===this;
}
}
职能人员2(){
this.name=“Jane”;
}
var bob=人1;
var bobby=新人2();
日志(Person1的bob实例);
console.log(Person2的bobby实例)你可以这么做,但你真的不应该这么做。允许您重载以下行为:

var Person1={
姓名:“约翰”,
[Symbol.hasInstance](实例){
返回实例===this;
}
}
职能人员2(){
this.name=“Jane”;
}
var bob=人1;
var bobby=新人2();
日志(Person1的bob实例);

console.log(Person2的bobby实例)
Person1
是指
{name:“John”}
对象
不是
构造函数
,所以你不能在
Person1

Person2
是一个
构造函数
,因此您可以在
Person2
上执行
instanceof

var Person1={
姓名:“约翰”
}
职能人员2(){
this.name=“Jane”;
}
var bob=人1;
var bobby=新人2(“约翰”);
console.log(bob==Person1)//true
console.log(对象的bob instanceof)//true
console.log(bobby instanceof Person2)//true
console.log(bobby instanceof Object)//true

console.log(bobby==Person2)//false
Person1
是对
{name:“John”}
对象的引用
不是
构造函数
,所以不能对
Person1
执行
实例

Person2
是一个
构造函数
,因此您可以在
Person2
上执行
instanceof

var Person1={
姓名:“约翰”
}
职能人员2(){
this.name=“Jane”;
}
var bob=人1;
var bobby=新人2(“约翰”);
console.log(bob==Person1)//true
console.log(对象的bob instanceof)//true
console.log(bobby instanceof Person2)//true
console.log(bobby instanceof Object)//true

log(bobby==Person2)//false
有意义。让我困惑的是,我可以用两种不同的方法创建对象,但其中只有一种是它的实际实例。让我困惑的是,你期望用两种不同方法创建的对象是同一事物的实例……两种不同的事物应该是不同的。让我困惑的是,我可以使用两种不同的方法创建对象,但其中只有一种是它的实际实例。让我困惑的是,你期望使用两种不同方法创建的对象是同一事物的实例……两种不同的事物应该是不同的
var Person1 = {
  name: "John"
}

function Person2() {
  this.name = "Jane";
}

var bob = Person1;
var bobby = new Person2();
console.log(bob instanceof Person1);
console.log(bobby instanceof Person2);