如何在 Javascript 中访问对象的构造函数?

How to access object's constructor in Javascript?

我有这段代码:

var MyConstructor = function(){};
var MyObject = new MyConstructor();

我注意到 MyObject.constructor 没有指向 MyConstructor。那么从对象本身访问对象的构造函数的标准方法是什么?

我需要它来访问构造函数的原型属性,例如 MyConstructor.prototype = {mykey : "value"}。我可以通过这种方式访问​​ mykeyMyConstructor.prototype.mykeyMyObject.constructor.prototype.mykey 未定义。

这是完整的代码及其使用 jsconsole.com 的输出:

var MyConstructor = function(){};
MyConstructor.prototype = {mykey : "value"};
var MyObject = new MyConstructor();

MyObject.mykey; // output: "value"
MyConstructor.prototype.mykey; // output: "value"
MyObject.constructor.prototype.mykey; // output: undefined
MyObject.constructor === MyConstructor; // output: false
MyObject.constructor.prototype.mykey === "value";  // output: false

发生这种情况是因为您更改了 MyConstructor 的原型 属性。这意味着 MyObject 是从 that 对象创建的,并且没有得到原始原型对象具有的 constructor 属性。所以在你的测试用例中,MyObject.constructor === Object,因为这是用于对象文字 {mykey: "value"}.

的构造函数

为了避免这种行为,不要分配一个新对象到prototype 属性,而是mutate现有的:

var MyConstructor = function(){};
MyConstructor.prototype.mykey = "value";
var MyObject = new MyConstructor();

console.log(
  MyObject.mykey, // output: "value"
  MyConstructor.prototype.mykey, // output: "value"
  MyObject.constructor.prototype.mykey, // output: "value"
  MyObject.constructor === MyConstructor, // output: true
  MyObject.constructor.prototype.mykey === "value",  // output: true
);

Object.getPrototypeOf(MyObject).mykey 直接从 MyObject 获取原型。

Mozilla developer link