javascript - 如何使Javascript "isPrototypeOf"函数返回true?

标签 javascript prototype

我正在尝试这个函数来查看不同的对象之间是否有关系,所以我尝试了:

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

嗯,它打印了 2 个错误。我觉得奇怪的是,“原型(prototype)”是每个函数/对象的属性/功能,那么JS如何判断一个对象是否是另一个对象的原型(prototype)呢?

我也尝试过:

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 个 false,而我期望 2 个 true。

最佳答案

要使 o 成为 o2 的原型(prototype),需要从原型(prototype)为 o 的构造函数构造 o2 对象。换句话说,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

关于javascript - 如何使Javascript "isPrototypeOf"函数返回true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38786736/

相关文章:

javascript - 如何从 iframe 内部将脚本元素复制到父级?

javascript - 突出显示文本区域内的文本

javascript - 如何使用 Javascript 基于选择框用数据填充文本字段?

javascript - 这是对 javascript 原型(prototype)的错误使用吗?

javascript - 继承:构造函数不运行 "super"?

javascript - 无法在javascript中显示以前隐藏的图像

JavaScript 精简

javascript - Bootstrap 折叠导航栏不展开

javascript - 用 sinon stub 一个原型(prototype)方法

JavaScript 数组原型(prototype)的独特方法