gpt4 book ai didi

javascript - 构造函数返回对象的 instanceof false

转载 作者:行者123 更新时间:2023-11-30 11:51:42 25 4
gpt4 key购买 nike

考虑下面的简单代码:

function C1() {
let x=5;
}

var c1=new C1;
alert(c1 instanceof C1); // returns true


function C2() {
let x=5;

return {
getx() { return x; }
}
}

var c2=new C2;
alert(c2 instanceof C2); // returns false ! why ??

问题:

  1. 为什么 c2 不是 C2 的实例?

  2. 我怎样才能让构造函数返回一个对象(即 C2),并且在不更改 C2 的情况下仍然让 new 返回该构造函数的一个实例?

最佳答案

why is c2 not an instance of C2 ?

因为C2.prototype不在c2的原型(prototype)链中。 c2 在原型(prototype)链中的唯一对象是 Object.prototype

how can I have a constructor returning an object (ie C2) and still have new returning an instance of that constructor ?

需要将构造函数的prototype对象放在对象的原型(prototype)链中。

例如

function C2() {
let x=5;

return Object.create(C2.prototype, {
getx: {value: function() { return x; }},
});
}

这就是您在构造函数中使用 this 免费获得的内容,因此您也可以这样做:

function C2() {
let x=5;
this.getx = function() { return x; };
}

WITHOUT changing C2

您可以通过 Object.setPrototypeOf 更改现有对象的原型(prototype)(此方法可以反优化代码)。

function C2() {
let x=5;

return {
getx() { return x; }
}
}

var c2=new C2;
Object.setPrototypeOf(c2, C2.prototype);

关于javascript - 构造函数返回对象的 instanceof false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39262785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com