如何修改Object构造函数

时间:2017-12-21 05:57:55

标签: javascript constructor

当我运行以下代码时

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的构造函数,这样我就可以为正在创建的所有新对象添加一些标准内容。

4 个答案:

答案 0 :(得分:3)

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

这实际上是一项安全功能,因为它会阻止JSON hijacking

  

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

这是一个可怕的想法,会打破您在此环境中使用的每个库(包括您自己编写的所有功能)。但是,如果您坚持在所有对象上使用公共(非个人!)属性,则可以考虑defining it on Object.prototype。不是我会推荐它,但至少要正确。

答案 1 :(得分:1)

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



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

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




答案 2 :(得分:1)

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



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

console.dir(p.standard);




答案 3 :(得分:-1)

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