为了账号安全,请及时绑定邮箱和手机立即绑定

关于判断js简单对象的问题(plain object)

关于判断js简单对象的问题(plain object)

开满天机 2019-03-14 18:15:52
这是redux的实现方式https://github.com/reactjs/re...,让我疑惑的是后面这一通操作,  let proto = obj  while (Object.getPrototypeOf(proto) !== null) {    proto = Object.getPrototypeOf(proto)  }  return Object.getPrototypeOf(obj) === proto*个人粗见怎么都应该是返回的true吧,这一通操作意义是什么呢?请大神来答疑解惑。
查看完整描述

7 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

寻找原型链的顶端


查看完整回答
反对 回复 2019-03-29
?
侃侃无极

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


查看完整回答
反对 回复 2019-03-29
?
慕姐4208626

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);


查看完整回答
反对 回复 2019-03-29
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

就是找父亲
找到null然后停止,开始对比null的儿子和判断的对象的父亲
object的父亲是顶级的object对象,祖父是null
父亲拿父亲比较相等
function的父亲是function,祖父是object,曾祖父是null
祖父跟父亲比较不相等

查看完整回答
反对 回复 2019-03-29
?
HUX布斯

TA贡献1876条经验 获得超6个赞

寻找原型链的顶端


let a = {};

isPlainObject(a); // true


class Person{};

let p = new Person();

isPlainObject(p); // false


查看完整回答
反对 回复 2019-03-29
  • 7 回答
  • 0 关注
  • 2402 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信