javascript - 检测对象是否是使用自定义原型设计模式创建的?
问题描述
我正在研究检测任何可以通过 JSON 作为存储向量安全保存和恢复的有状态变量的逻辑。
这部分意味着检测转储和恢复“安全”的类型,这很容易:
- 数字、字符串和布尔值(通过
typeof
) - 数组元素(通过
instanceof Array
与迭代元素中的 ^ 组合) - ES6 类实例(通过
typeof
object 和value.__proto__.constructor.name
)
不过,我正在努力解决一种类型的问题。这是通过调用创建的:
var nn = new convnetjs.Net();
这来自: https ://github.com/karpathy/convnetjs/blob/master/src/convnet_net.js#L8
nn
如果您检查上面显示的 var,这就是您将看到的。
这是我尝试过的:
nn instanceof Object
=== 真Object.getPrototypeOf(nn)
- 有趣的是,这暴露了Net.prototype
上面链接中分配的功能,第 12 行以后。似乎是一个线索。Object.getPrototypeOf(nn).toString()
==[object Object]
Object.getPrototypeOf(nn) instanceof Object
=== 真的。有道理,因为它是一个包含附加到原型的自定义函数的对象。Object.getPrototypeOf(nn).constructor.name
===Object
有人知道或知道我如何安全地检测到这种类型的物体吗?普通对象很好,但我不想用修改过的原型覆盖对象。
解决方案
如果使用它来验证它是一个普通对象或一个具有自定义原型的对象:
const isPlainObject = Object.getPrototypeOf(value) === Object.getPrototypeOf({});
推荐阅读
- reactjs - 在 react redux 应用程序上显示更新/发布的动态消息
- c# - 在已发布的 ASP.Net Core API 中创建和保存文件不起作用
- javascript - 放入 carousal 时图像被拉伸
- sql - 分层列标签 SQL
- php - 如何在 laravel 中设置未来的软删除
- javascript - 有没有办法在添加时仅使用带有数字索引的 javascript 添加 DOM 元素?
- python - 如何在 Pandas Python 中按 id 对行进行排名
- selenium-ide - 我如何从搜索框中获取值该框是自动完成的
- php - 在 Doctrine Query builder Query 中调用自定义 MySql 函数
- sharepoint - 使用图形 api 创建站点