7 回答
TA贡献2051条经验 获得超10个赞
let proto = obj // proto 默认值
while (Object.getprototypeOf(proto) !== null) { // 判断proto的原型对象是否存在
proto = Object.getprototypeOf(proto) // 存在的话就把proto的原型对象赋值给proto,继续判断
}
return Object.getPrototypeOf(obj) === proto* // 实际上就是判断obj的原型链有几层,只有一层就返回true
TA贡献1852条经验 获得超7个赞
涉及到原型链的继承,你运行下代码就明白了:
function Foo() {}
// obj不是一个plain object
var obj = new Foo();
console.log(typeof obj, obj !== null);
let proto = obj
while (Object.getPrototypeOf(proto) !== null) {
proto = Object.getPrototypeOf(proto)
}
// false
var isPlain = Object.getPrototypeOf(obj) === proto;
console.log(isPlain);
TA贡献1815条经验 获得超6个赞
就是找父亲
找到null然后停止,开始对比null的儿子和判断的对象的父亲
object的父亲是顶级的object对象,祖父是null
父亲拿父亲比较相等
function的父亲是function,祖父是object,曾祖父是null
祖父跟父亲比较不相等
TA贡献1876条经验 获得超6个赞
寻找原型链的顶端
let a = {};
isPlainObject(a); // true
class Person{};
let p = new Person();
isPlainObject(p); // false
添加回答
举报