猿问

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

这是redux的实现方式https://github.com/reactjs/re...
让我疑惑的是后面这一通操作,

  let proto = obj

  while (Object.getPrototypeOf(proto) !== null) {

    proto = Object.getPrototypeOf(proto)

  }

  return Object.getPrototypeOf(obj) === proto*

个人粗见怎么都应该是返回的true吧,这一通操作意义是什么呢?


请大神来答疑解惑。


开满天机
浏览 2403回答 7
7回答

墨色风雨

寻找原型链的顶端

侃侃无极

let proto = obj // proto 默认值while (Object.getprototypeOf(proto) !== null) { // 判断proto的原型对象是否存在proto = Object.getprototypeOf(proto) // 存在的话就把proto的原型对象赋值给proto,继续判断}return Object.getPrototypeOf(obj) === proto* // 实际上就是判断obj的原型链有几层,只有一层就返回true

慕姐4208626

涉及到原型链的继承,你运行下代码就明白了:function Foo() {}// obj不是一个plain objectvar obj = new Foo();console.log(typeof obj, obj !== null);let proto = objwhile (Object.getPrototypeOf(proto) !== null) {  proto = Object.getPrototypeOf(proto)}// falsevar isPlain = Object.getPrototypeOf(obj) === proto;console.log(isPlain);

红糖糍粑

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

HUX布斯

寻找原型链的顶端let a = {};isPlainObject(a); // trueclass Person{};let p = new Person();isPlainObject(p); // false
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答