both
案例中我会得到true
function Person(name){
this.name = name;
return false;
}
var p1 =new Person('ss')
var p2 = Person('sdd')
console.log(p1 instanceof Person)
console.log(p2 instanceof Person)
目前我在true
获取case
而不是second
所以应该返回什么,以便在这两种情况下我都会得到true
在第二种情况下,我不想使用new
关键字..为什么你们投入了我..我知道使用new
我可以创建对象。但我想知道如何不用{ {1}}关键字
答案 0 :(得分:3)
您需要将p2
作为Person
的实例创建为var p2 = new Person('sdd')
,然后它将返回true
console.log(p2 instanceof Person)
function Person(name){
this.name = name;
return false;
}
var p1 =new Person('ss');
var p2 = new Person('sdd');
console.log(p1 instanceof Person);
console.log(p2 instanceof Person);

instanceof运算符测试构造函数的prototype属性是否出现在对象的原型链中的任何位置。
答案 1 :(得分:3)
您可以查看new.target
并创建该功能的实例。
使用
new.target
属性可以检测是否使用new
运算符调用了函数或构造函数。在使用new运算符实例化的构造函数和函数中,new.target
返回对构造函数或函数的引用。在正常的函数调用中,new.target
为undefined
。
function Person(name) {
if (!new.target) {
return new Person(name);
}
this.name = name;
}
var p1 = new Person('ss'),
p2 = Person('sdd');
console.log(p1 instanceof Person);
console.log(p2 instanceof Person);