javascript Object.create 丢失属性

标签 javascript javascript-objects

我有点迷失和/或太天真了。我想创建一个带有原型(prototype)对象的对象,该对象包含一个函数,该函数将一个值添加到作为属性创建的列表中。

但是Object.create似乎忽略了属性的创建。至少,我是这么想的。

我没有得到什么?

这是一个例子:

const proto = {
  add(s) {
    this.list.push(s);
  }
}
const props = {
  list: []
}
const newObj = Object.create(proto, props);

console.log('newObj', newObj);
// What happendened to the list property?

newObj.add('test');
// due to undefined list-Property
// an error is being thrown

最佳答案

问题在于 properties 对象必须以特定方式格式化。请参阅此处:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Syntax

These properties correspond to the second argument of Object.defineProperties().

你可以这样做:

const props = {
  list: {
      value: []
  }
}

这是定义属性的最明确的方式,并且有一些 interesting effects 。但除非您需要如此严厉,否则我建议您这样做:

newObj.list = []

关于javascript Object.create 丢失属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54427383/

相关文章:

javascript - 对象数组与lodash的深度比较

javascript - 在 JavaScript 中将数据属性转换为访问器属性,反之亦然

javascript - 在 JavaScript 中进行除法运算时,如何将 NaN 替换为 0?

javascript - 如何使用 jQuery 将光标位置设置在文本字段中字符串的末尾?

javascript - 在 backbone.js 中,如何使用新模型数据更新 View ,同时在没有完整渲染的情况下保持排序顺序

javascript - 有什么方法可以运行手机客户端浏览器脚本吗?

javascript - JSON : fetch mapping data

javascript - ChildBrowser 插件在 ios 应用程序中崩溃

javascript - 将具有一个属性的对象转换为父属性

javascript - 面向对象的 Javascript 错误对象不是函数