Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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 Object.prototype.isPrototypeOf与obj.prototype.isPrototypeOf_Javascript_Prototype - Fatal编程技术网

Javascript Object.prototype.isPrototypeOf与obj.prototype.isPrototypeOf

Javascript Object.prototype.isPrototypeOf与obj.prototype.isPrototypeOf,javascript,prototype,Javascript,Prototype,我并不期待两者之间的差异。Airbnb已经很好地解释了这一点 考虑一个普通类及其实现,如下所示: class C1 {} const c1Imp = new C1(); 其中.prototype应继承自 为什么以下不等同 console.info(Object.prototype.isPrototypeOf.call(C1, c1Imp)); // false console.info(C1.prototype.isPrototypeOf(c1Imp)); // true (()=>{ 类

我并不期待两者之间的差异。Airbnb已经很好地解释了这一点

考虑一个普通类及其实现,如下所示:

class C1 {}
const c1Imp = new C1();
其中
.prototype
应继承自

为什么以下不等同

console.info(Object.prototype.isPrototypeOf.call(C1, c1Imp)); // false
console.info(C1.prototype.isPrototypeOf(c1Imp)); // true
(()=>{
类别C1{}
常数c1Imp=新的C1();
console.info(c1Imp.constructor.name);
info(`${Object.prototype.isPrototypeOf.call(C1,c1Imp)}(应该是true)`);
console.info(`${C1.prototype.isPrototypeOf(c1Imp)}(应该是true)`);
类C2{}
常数c2Imp=新的C2();
console.info(c2Imp.constructor.name);
console.info(`${Object.prototype.isPrototypeOf.call(C1,c2Imp)}(应该是false)`);
console.info(`${C1.prototype.isPrototypeOf(c2Imp)}(应该是false)`);

})();您应该这样做:

Object.prototype.isPrototypeOf.call(C1.prototype, c1Imp) // true
在第一个示例中,您在
C1
本身上调用
Object.prototype.isPrototypeOf
方法,而在第二个示例中,您在
C1.prototype
上调用
isPrototypeOf
这只是一些棘手的语义问题。

如上所述,修复方法是在
C1.prototype
本身上调用
Object.prototype.isPrototypeOf

查看更新的代码段:

(()=>{
类别C1{}
常数c1Imp=新的C1();
console.info(c1Imp.constructor.name);
console.info(`${Object.prototype.isPrototypeOf.call(C1.prototype,c1Imp)}(应该是true)`);
console.info(`${C1.prototype.isPrototypeOf(c1Imp)}(应该是true)`);
类C2{}
常数c2Imp=新的C2();
console.info(c2Imp.constructor.name);
console.info(`${Object.prototype.isPrototypeOf.call(C1,c2Imp)}(应该是false)`);
console.info(`${C1.prototype.isPrototypeOf(c2Imp)}(应该是false)`);

})();
对象。原型
指的是
对象
的一个非常具体的实例<代码>C1。原型
也指
对象
,但与
对象的实际实例不同。原型
。将类型与实例分开。两个实例可以是相同的类型,但可以是不同的对象。您实际上调用了
C1.isPrototypeOf(c1Imp))
,这是false,因为
C1.prototype.isPrototypeOf(c1Imp)
是true。