我正在尝试使用此功能来查看不同的对象是否彼此存在关联,所以我尝试了:
var o={name:'abc'};
var o2=o;
console.log(o.isPrototypeOf(o2));
console.log(o2.isPrototypeOf(o));
嗯,它打印2个谬误。我觉得很奇怪,“prototype”是每个函数/对象的属性/函数,所以JS如何判断一个对象是否是另一个对象的原型?
我也尝试过:
var Person=function(){
name='abc',
age=30
};
var o1=new Person();
var o2=new Person();
console.log(o1.isPrototypeOf(o2));
console.log(o2.isPrototypeOf(o1));
再次,它打印2个谬误,而我期待2个真实。
答案 0 :(得分:1)
要使o
成为o2
的原型,o2
对象需要从原型为o
的构造函数构造。换句话说,o2
需要正确继承 o
。
为变量分配一个对象或两个对象是相似的是不够的。一个对象必须从另一个对象继承。
所以在经典意义上,这必须发生:
var o = {};
var OConstructor = function () {};
OConstructor.prototype = o;
var o2 = new OConstructor();
o.isPrototypeOf(o2); // true
在现代代码中,您还可以使用Object.create()
继承:
var o = {};
var o2 = Object.create(o);
o.isPrototypeOf(o2); // true
答案 1 :(得分:0)
var o2=o
o2
指向o
后。因此o
和o2
指向同一个对象。是o
原型吗?不是o2
原型吗?再也不会了。
第二部分o1
不是o2
的原型。
试着打电话
console.log(Person.prototype)
您将看到Person
的实例的原型对象(它不是Person
函数的原型)。
您也可以使用obj.__proto__
查看obj
的原型。这是隐藏的财产。最好不要在生产中使用它。