我如何修改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