如何在 Javascript 中访问对象的构造函数?
How to access object's constructor in Javascript?
我有这段代码:
var MyConstructor = function(){};
var MyObject = new MyConstructor();
我注意到 MyObject.constructor
没有指向 MyConstructor
。那么从对象本身访问对象的构造函数的标准方法是什么?
我需要它来访问构造函数的原型属性,例如 MyConstructor.prototype = {mykey : "value"}
。我可以通过这种方式访问 mykey
:MyConstructor.prototype.mykey
但 MyObject.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 获取原型。
我有这段代码:
var MyConstructor = function(){};
var MyObject = new MyConstructor();
我注意到 MyObject.constructor
没有指向 MyConstructor
。那么从对象本身访问对象的构造函数的标准方法是什么?
我需要它来访问构造函数的原型属性,例如 MyConstructor.prototype = {mykey : "value"}
。我可以通过这种方式访问 mykey
:MyConstructor.prototype.mykey
但 MyObject.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 获取原型。