如何修改Object构造函数

问题描述 投票:1回答:4

当我运行以下代码时

var ExtendedObject = function() {
  this.standard = 5;
};

Object = ExtendedObject.bind(Object);
var p = new Object();
console.dir(p.standard);

,输出是

5

正如所料。

如果我改为将变量p实例化为对象文字,如下所示:

var ExtendedObject = function() {
  this.standard = 5;
};

Object = ExtendedObject.bind(Object);
var p = {};
console.dir(p.standard);

结果是

未定义

我试图找到一种方法来修改Object的构造函数,这样我就可以为正在创建的所有新对象添加一些标准内容。

javascript constructor
4个回答
3
投票

不,绝对不可能重新定义对象文字的评估方式;它将始终成为内置Object.prototype的本机对象,而不是子类或任何东西,它也不会调用自定义构造函数。

这实际上是一个安全功能,因为它可以防止JSON hijacking

...这样我就可以为正在创建的所有新对象添加一些标准内容

这是一个可怕的想法,将打破你在这个环境中使用的每个库(包括你自己编写的所有函数)。但是,如果你坚持在所有对象上都有一个共同的(而不是个别!)属性,你可以考虑使用defining it on Object.prototype。不是我会推荐它,但至少做得正确。


1
投票

您可以创建一个类并从Object扩展它。

class MyObject extends Object {
  constructor() {
     super();
     this.standard = 5;
  }
}

const obj = new MyObject();
console.log(obj);

1
投票

在Object的原型上定义属性,如下所示:

Object.defineProperty(Object.prototype, 'standard', {
  value: 5,
  writable: true,
  enumerable: true,
  configurable: true
});
var p = {};

console.dir(p.standard);

-1
投票

这可能是一个讨论JavaScript对象的有用链接。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

© www.soinside.com 2019 - 2024. All rights reserved.