我目前正在制作一个使用马尔可夫链的聊天人工智能。后端对象之一是将字符串映射到它所属的任何链的对象,这样:
var words = {}
words['test'] = [ ['this','is','a','test'], ['this','too','tests','things'] ]
现在,我有一个问题。 “构造函数”是一个完全有效的词,但似乎你无法像我上面描述的那样映射它,因为“构造函数”是 JS 中每个对象的属性(当然还有其他东西)。所以我的问题是:有没有办法构建这张地图?
constructor
不是每个对象的属性。虽然默认情况下每个从文字语法创建的对象都会有constructor
在其原型链中。这是因为这些对象继承自Object.prototype
,它确实具有该属性。
一种解决方案是使用没有原型链的对象。
var words = Object.create(null);
words['test'] = [ ['this','is','a','test'], ['this','too','tests','things'] ];
现在不会有继承的属性来混淆事物了。但这在 IE8 及更低版本中不起作用。
另一种解决方案是使用.hasOwnProperty()
看看是否constructor
属性是对象本身的或继承的。如果继承的话,那它就不是你想要的。
if (words.hasOwnProperty("constructor"))
console.log(words.constructor);
如果条件通过,那么我们就知道我们没有使用继承的属性,而是使用对象自己的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)