7 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個贊
let proto = obj // proto 默認(rèn)值
while (Object.getprototypeOf(proto) !== null) { // 判斷proto的原型對象是否存在
proto = Object.getprototypeOf(proto) // 存在的話就把proto的原型對象賦值給proto,繼續(xù)判斷
}
return Object.getPrototypeOf(obj) === proto* // 實(shí)際上就是判斷obj的原型鏈有幾層,只有一層就返回true

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個贊
涉及到原型鏈的繼承,你運(yùn)行下代碼就明白了:
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貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個贊
就是找父親
找到null然后停止,開始對比null的兒子和判斷的對象的父親
object的父親是頂級的object對象,祖父是null
父親拿父親比較相等
function的父親是function,祖父是object,曾祖父是null
祖父跟父親比較不相等

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個贊
尋找原型鏈的頂端
let a = {};
isPlainObject(a); // true
class Person{};
let p = new Person();
isPlainObject(p); // false
添加回答
舉報