gpt4 book ai didi

javascript - 自定义对象的js实例

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

我在 JavaScript 中使用 instanceof 时遇到了问题:

var MyObject = function() {
var prop = {};
return prop;
}

var testObject = new MyObject();
console.log(testObject instanceof MyObject); // return false;

Instanceof 返回 Object 而不是预期的 MyObject。我无法删除“return prop”;如何获取 testObject 的类型 MyObject ?

感谢您的帮助

编辑:即使我的问题看起来像这样:What's wrong with a JavaScript class whose constructor returns a function or an object ,我的需要更多关于 new 的作用的解释。

最佳答案

您可能可以根据 new 运算符的作用将其分解为多个步骤

var MyObject = function () {
var prop = {};
return prop;
}

var testObject = Object.create(MyObject.prototype);
var result = MyObject.call(testObject);
// result is the actual output of new MyObject();
result = result && typeof result === 'object' ? result : testObject;

console.log(testObject instanceof MyObject); // returns true
console.log(result instanceof MyObject); // returns false because it's actually prop (i.e. {})
<小时/>

我们所做的是将new 替换为执行new 时发生的实际步骤。以下是步骤

  1. 创建一个原型(prototype)与函数(构造函数)原型(prototype)相同的对象。这就是 var testObject = Object.create(MyObject.prototype);

  2. 调用(构造函数)函数,并将 this 设置为此新创建的对象。这就是 var result = MyObject.call(testObject); 所做的(第一个参数是 MyObject 调用的 this 的值)

  3. 如果函数返回非 null 对象,则 new ... 表达式的计算结果为该值。否则,它将计算为在步骤 1 中创建的对象。

<小时/>

对于这个问题,最后一步的非 null 返回值 (prop = {}) 妨碍了我们实际测试步骤 1 中返回的对象的类型。通过将其拆分为组件步骤,我们可以获得创建的对象对象(并在instanceOf测试中使用它)

关于javascript - 自定义对象的js实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31790946/

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