2016-08-05 96 views
1

我尝试这个功能,看看不同的对象具有相互原有关系,所以我尝试:如何让Javascript“isPrototypeOf”函数返回true?

var o={name:'abc'}; 
var o2=o; 
console.log(o.isPrototypeOf(o2)); 
console.log(o2.isPrototypeOf(o)); 

那么,它打印2个falses。我感到奇怪的是,“原型”是每个函数/对象的属性/功能,所以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个falses,而我预计2个trues。

+1

无限。 'a'的'b'原型和'a'的原型,这不会发生。 – Tushar

+2

您只需将对象引用分配给变量。这与原型无关。要创建一个原型链,您需要使用'new'或'Object.create'。 – ftor

+0

请重新阅读'isPrototypeOf'的文档。通过让一个对象实际上成为另一个对象的原型,“使”isPrototypeOf'函数返回true“。 – 2016-08-05 10:22:08

回答

1

对于oo2的原型,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 
0

之后var o2=oo2指向o。所以oo2指向同一个对象。是o本身的原型?号是o2本身的原型?没有了。

第二部分o1不是o2的原型。 尝试致电

console.log(Person.prototype) 

你会看到实例Person的原型对象(它不是Person函数的原型)。

您也可以使用obj.__proto__来查看obj的原型。这是隐藏的财产。最好不要在生产中使用它。

+0

我添加了另一个代码片段,请参阅上文,谢谢。 – Troskyvs