首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测对象是否使用自定义原型设计模式创建?

检测对象是否使用自定义原型设计模式创建?
EN

Stack Overflow用户
提问于 2019-08-07 14:51:56
回答 1查看 72关注 0票数 0

我正在研究检测任何可以通过JSON作为存储向量安全保存和恢复的有状态变量的逻辑。

这意味着检测那些“安全”转储和恢复的类型,这很容易:

  • 数字、字符串和布尔(通过typeof)
  • 数组元素(通过迭代元素中的instanceof Array和^组合)
  • ES6类实例(通过typeof对象和value.__proto__.constructor.name)

不过,有一种类型我很难接受。它是通过调用创建的:

var nn = new convnetjs.Net();

它来自于:net.js#L8

有趣的是,Chrome工具将其检测为"Net“对象:

如果检查上面所示的nn变量,您将看到这一点。

以下是我尝试过的:

  • nn instanceof Object ===真
  • Object.getPrototypeOf(nn) -有趣的是,这公开了上面第12行链接中分配给Net.prototype的函数。好像是条线索。
  • Object.getPrototypeOf(nn).toString() == [object Object]
  • Object.getPrototypeOf(nn) instanceof Object ===真。这是有意义的,因为它是一个对象,包含附加到原型的自定义函数。
  • Object.getPrototypeOf(nn).constructor.name === Object

是否有人知道或有办法安全地检测到这类物体?普通对象很好,但我不想用修改过的原型覆盖对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-13 09:04:03

如果使用它来验证它,这是一个普通的对象,或者是一个具有自定义原型的对象:

代码语言:javascript
复制
const isPlainObject = Object.getPrototypeOf(value) === Object.getPrototypeOf({});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57397153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档