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