我如何修改Object构造函数

当我运行下面的代码

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

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

,输出是

如预期。

如果我将变量p实例化为如下的对象字面值:

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

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

结果是

未定义

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


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

这实际上是一项安全功能,因为它可以防止JSON劫持。

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

这是一个可怕的想法,并会打破你在这个环境中使用的每一个库(包括你自己写的所有函数)。 但是,如果你坚持要在所有对象上拥有一个共同的(不是个人的!)属性,你可以考虑在Object.prototype上定义它。 不是我会推荐它,但至少做得对。


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

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

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

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

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

console.dir(p.standard);
链接地址: http://www.djcxy.com/p/47785.html

上一篇: How can I modify the Object constructor

下一篇: Not able to bind data with Kendo ui grid